携帯用にCookieを使わないセッション管理を実現しようとしています。

その挙動を確認してみたくて、FF3でCookieを切ってみて、こういうコードを書いてみました。

<?php
ini_set('session.auto_start', 0);
ini_set('session.use_trans_sid', 1);
ini_set('session.use_only_cookies', 0);
ini_set('session.use_cookies',0);
session_start();
echo session_id();
?>

ここでechoされるsession_id()がページを更新する度にIDが変わってしまい、ずっとステートレスな状態になってしまっています。

Cookieが送信されないと毎回別Sessionと看做しているようなのですが、このように毎回SessionIDが変わるという現象においてどういうことが原因として考えられますでしょうか?

当方の環境は以下の通りです。

PHP:5.2.5(Xampp1.6.6a)
OS:Win XP Pro SP3

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2009/05/14 23:12:59
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:chibitomo No.1

回答回数98ベストアンサー獲得回数3

ポイント25pt

Cookieが送信されないと毎回別Session

もうすでに別接続っつうこと。

http://www.yc.tcu.ac.jp/~yamada/doc/php/0802.html

id:gothedistance

URLにsession.nameで引き渡ない限り、別Sessionになるという基本的なことを失念していました。

ご回答ありがとうございました。

2009/05/14 23:08:14
id:hijk05 No.2

回答回数1307ベストアンサー獲得回数23

ポイント30pt

session_start();

セッションがここで開始されますので、新しいセッションIDになります。

この書き方だと毎回セッションIDが変わるのは仕様どおりです。

http://q.hatena.ne.jp/answer

id:gothedistance

お恥ずかしい限りです。失礼しました。

また、URLもしくはhiddenで常にセッションIDを引き渡さない限り

別Sessionになることも同時に理解しました。ありがとうございました。

2009/05/14 23:09:39
id:dungeon-master No.3

回答回数571ベストアンサー獲得回数40

ポイント25pt

>ini_set('session.use_trans_sid', 1);

これの戻り値を確認してみてください。

session.use_trans_sidはPHP5以降ではPHP_INI_PERDIRレベルらしいので、

ini_setできないのではないでしょうか?

http://jp2.php.net/manual/ja/ini.list.php

その場合、php.ini、httpd.conf、.htaccessのいずれかに記述すればいけると思います。

id:gothedistance

ini_get('session.use_trans_sid')したら1でした。

id:hijk05さんのご指摘の通り、リロードする度にstart()が呼ばれてしまうのが原因のようです。

それに、URLにSessionIDを引き渡していないままリロードしているので、毎回別のSessionIDが

振られるのも正しい挙動のように思います。

ご回答ありがとうございました。

2009/05/14 23:12:04

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません