PHPのセッションIDの引き渡しについての質問です。

php.iniで、
session.use_cookies=On
session.use_only_cookies=Off
session.use_trans_sid=On
になっています。
それなのに、クッキーを有効にしたブラウザで表示させてもURLにIDが埋め込まれてしまいます。
ただし、1度リロードすると埋め込まれなくなります。
これは何故でしょうか? どのようにすればリロードしなくても埋め込まれないように出来るのか教えて下さい。

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

回答2件)

id:sasada No.1

回答回数1482ベストアンサー獲得回数133

ポイント30pt

http://php.s3.to/man/ref.session.html

セッション処理関数(session)

session.auto_startがOFF(FALSE)ってことはないですよね?

もしくは、ちゃんとsession_start() か session_register() でセッションの開始を宣言してますでしょうか。

id:wintarsnow

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

session.auto_startはOffですが、session_start()の宣言はしています。

テスト用に以下のようなファイルを作ってアクセスすると、リンク先にIDが埋め込まれます。原因になっている箇所がありましたら指摘して下さい。

session_start();

?>

<html xmlns=”http://www.w3.org/1999/xhtml”>

<head>

<title>テスト</title>

</head>

<body>

リンク

</body>

</html>

2004/10/20 15:28:32
id:sasada No.2

回答回数1482ベストアンサー獲得回数133

ポイント30pt

えーと、質問からして、session.use_only_cookiesをTRUEにすると、問題があるんですよね・・・。

このソースでは、session.use_trans_sidがTRUEになってるので、初期値として 相対URIは自動的にセッションIDを含むように変換されます。

これを避ける為に、session.use_trans_sidをFALSEにしてみてください。

これくらい単純な構成なら、同ソースと/link.phpにsession_start()を宣言するだけでよいと思いますが、複雑なセッション管理が必要なら、session_name()やsession_id()で制御してください。

なお、session_start()を宣言しただけで、 スーパーグローバル配列$_SESSIONへ新しい変数が登録されていない場合、セッションのレコードが作成されませんので御注意を。(^^)

id:wintarsnow

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

>session.use_only_cookiesをTRUEにすると、問題がある

そうですね、出来ればクッキー無効の環境でも動作するようにしたいと思っているので。

>session.use_trans_sidがTRUEになってるので、初期値として 相対URIは自動的にセッションIDを含むように変換されます。

そうなのですか! それじゃ仕様なのですね…。

最初のアクセス時にクッキー有効無効のチェックをして、有効の場合だけ、ini_set関数でsession.use_trans_sidをFALSEにすることで、なんとか解決できました。

ありがとうございました!

2004/10/20 20:42:50

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

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

トラックバック

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

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

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