
お世話になります。
現在.htaacessでパラメータをRewriteしてアドレスをスッキリさせています。
【htaccess】
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([-0-9A-Za-z]+)/([-0-9A-Za-z)]+)$ index.php?a=$1&b=$2 [L]
www.sample.com?a=test1&b=test2
を
www.sample.com/test1/test2
といった形にしています。
SESSIONのパスが現在「/」となっており、どのページでセッションを発行しても「www.sample.com」以下ならすべて有効になっているのですが、これをその階層以下でしか使えないようにする方法はありますでしょうか?
【例】
www.sample.com/test1/aaaa で発行したセッションはその階層(test1)以下でのみ有効としたい。
www.sample.com/test1/aaaa 、www.sample.com/test1/bbbb で開いたセッションは1つ目の階層(test1)以下どのページでも有効にしたい
実際に「test1」フォルダが存在するわけではないため、htaccessを設置することができず、また「test1」の階層名も様々であるため困っています。
どうぞよろしくおねがいいたします。
No.5ベストアンサー
- 回答日時:
連投失礼します。
「セッション名」を変更するという方法も考えられそうです。どちらかと言えばこちらの方が扱いやすいかも…session_name
http://php.net/manual/ja/function.session-name.php
で、OKWaveで検索してみたら案の定、既に質問がありました。
【PHP】SESSION変数の競合を避ける方法は?
http://oshiete.goo.ne.jp/qa/4139810.html
このケースでは test1 をそのままセッション名にすればいいと思います。半角英数字しか使えないことには注意してください。
No.4
- 回答日時:
なるほど、上書きですか…
・session_set_cookie_params
・session_save_path
これらを同じように両方制御する必要がありそうですね。最初の回答はあながち誤りでは無かったかも・・・
No.3
- 回答日時:
session_set_cookie_paramsの誤りでした、すみません。
ご回答ありがとうございました。
早速試してみまして、
$a = isset($_GET['a']) ? htmlspecialchars($_GET['a']) : "";
$b = isset($_GET['b']) ? htmlspecialchars($_GET['b']) : "";
にてアドレスの階層名を取得し、
session_set_cookie_params(0, '/'.$a.'/');
をsessin_start()の前に記述し、ブラウザで「http://sample.com/aaa/bbb」を叩いたところPHPSESSIDの値が「path:/aaa/」の名前できちんととることができました。
しかし次は「http://sample.com/bbb/ccc」として叩いたところ、上書きされてしまったみたいで、「aaa」で取得したPHPSESSIDが消えてしまいました…。
これをいずれも残す方法はありませんでしょうか?
ショッピングサイトを作っており、「aaa」の部分にショップ名が入り各階層ごとにショッピングカートの内容を保持したいと考えています。
上記の場合、カート内が混合することはないもののaaaのお店に行ったあとbbbのお店に行き、再度aaaのお店に戻ってきた時カートが空になってしまう問題がでてしまうかと思います(;_;)
どうぞよろしくおねがいいたします。
No.2
- 回答日時:
session の仕組みとしてcookieを使う場合、有るページからsession cookie をブラウザに送ると、ブラウザ側では、その時の付帯情報として付いてきたcookie_path 設定に基づき、現在のパス階層で有効なcookieのみを次のリクエスト時に送信しています。
なので、上位階層のパスのページにリンクで飛ぶと、下位階層で設定したセッション情報がブラウザから送信されずにセッション切れを起こしたりします。path_info を利用する場合、階層によらずに統一したいので、cookie_path を / に設定することが多いですけど、パスごとに個別制限したいときは、これを設定します。
php では、セッション用ならphp.iniの session.cookie_path を設定することになります。
ページのpath_infoによって変更するなら、ページのパスを$_SERVER["REQUEST_URI"]や$_SERVER["PATH_INFO"]などで判定したうえで、以下の関数で設定してから session_start() します。これをindex.phpのトップで行えば良いと思います。
session_set_cookie_params ( int $lifetime [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]] )
http://jp.php.net/manual/ja/function.session-set …
No.1
- 回答日時:
要はindex.phpがフロントコントローラである、ということですよね。
ならばそこで session_save_path 関数による分岐を行ってみてはどうでしょうか?但し毎回 session_start 関数より前に実行しなければならないことに注意してください。PHP Manual - session_save_path
http://www.php.net/manual/ja/function.session-sa …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
フォームで戻った際に入力済み...
-
SplFileObject を利用したとき...
-
csvファイルについて教えて下さ...
-
PHP8でWarning:Undefined varia...
-
PHPSpreadsheetによる書き出し...
-
PHPの変わった閉じタグの必要性...
-
セッション関数を使わずにファ...
-
composerをインストールしたい...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
$_SESSION 有効期限をブラウザ...
-
PHP session_destroyとsession...
-
下までスクロールしたらDBの...
-
「セッション管理用のクッキー...
-
セッションを使うと要するに
-
IE11でページ遷移時にセッショ...
-
session_start出来ません。
-
さくらサーバーでsessionが使え...
-
PHPのセッションについて。
-
jqueryの$.ajaxでPHPに値を渡し...
-
以下プログラム(php)のバ...
-
セッションの変数の受渡しについて
-
携帯サイトのセッションについて
-
自動ログアウト
-
session_start();について
-
セッションが変数が取得できません
-
sessionが分かりにくいです
-
PHPのセッション変数 絞り込み...
-
ブラウザの戻る ページ遷移PHP...
-
PHPでpaypal支払後のセッション...
おすすめ情報