PHPのセッションについての質問です。検索エンジンのクローラーがアクセスした時に、URIにセッションIDが埋め込まれないようにしたいのですが、上手く行きません。

http://jp2.php.net/session_destroy のような手順でセッションとクッキーを削除したのですが、リクエストのたびに違うセッションIDが発行されてしまっているようです。(クローラーの判定・処理の分岐は上手く行ってるのでこれは原因ではありません。)
session.use_trans_sid は無効になってます。一部リンク先のURIにSIDを埋め込む処理がありましたが、こちらも無効にしたため、これが原因でもありません。)
どういう原因が考えられるかご教授下さい。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/01/19 11:01:01
  • 終了:--

回答(3件)

id:ito-yu No.1

ito-yu回答回数323ベストアンサー獲得回数142006/01/19 11:40:52

ポイント24pt

「セッションID付きのURLにクローラーがアクセスしてくる」という話ではないんですよね。であれば、クローラーだと判定したときはsession_start()しなければいいのではないですか?

あとは session.auto_start = 0、session.use_only_cookies = 1 あたりも設定してみてください。

id:hhashimo

そう思ってsession_start()をしないでsession_destroy()してたのですが、それでも変化がないし、どうも削除の時もsessyion_start()は必要のようなので残しています。

session_aouto_startは無効ですが、他の動作の都合でsession.use_only_cookiesは無効に出来ません。

session.auto_start = 0

2006/01/19 11:45:47
id:ygs No.2

ygs回答回数8ベストアンサー獲得回数02006/01/21 15:12:22

ポイント23pt

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

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

session.use_only_cookiesを無効にしないと大変です。


1.Aさんが検索エンジンからアクセスしてログインする。

2.Bさんが同じ検索エンジンからアクセスすると、、AさんのMyPageが見れる!


ことになります。

Session fixationって言うらしいです。


検索エンジンを弾くか、

セッションまわりの自作しかないと思います。


ログインありページとログインなしページをわけるとか、

検索エンジン用のページを作るか、

して、ユーザが使うページから検索エンジンを締め出してください。


そうしないと個人情報が、、、

セッションをログインに使ってることを前提に書きましたが、

そうでなくても、そのままにするのはよくないですね。


Session fixationについて知っていて、

この質問を投げているんだったらごめんなさい。

id:hhashimo

回答ありがとうございます。session.use_only_cookiesを無効に、とありますが、有効に、の間違いじゃないですか?

いずれにしても、そういった問題が別途検討したいと思います。

なお、その後、クローラーがアクセスした時だけsession.gc_maxlifetime を0、gc(ガーベッジコネクション)プロセス の始動する確率を100%にすることで、ほとんどのアクセスに対してURLにセッションIDが埋め込まれることを回避できましたが、それでもまだ埋め込まれるケースがあります。

不思議なことに一旦埋め込まれなくなったIPアドレスが再び埋め込まれるようになったりしています。

register_globalsがonなので、その関係でセッション変数がグローバル化してるのなかな?などど思いsession_unregister()でグローバル変数のセッションとしての登録を解除したりもしてみましたが、まだ完全ではありません。

全く訳がわかりません。

2006/01/22 06:13:56
id:ygs No.3

ygs回答回数8ベストアンサー獲得回数02006/01/22 11:56:12

ポイント23pt

session.use_only_cookies、、、有効の間違いですね、、、


SIDがリンクに埋め込まれるかどうかは、クッキーがあるかないかで決まります。

ブラウザでクッキーを有効にしていても最初のリクエストでは、クッキーがないので、URIにSIDが入っているはずです。

もしかしたら、クローラーもクッキーを扱えるのかもしれません。


ガベージコレクションはそのSIDでアクセスしたときに値が保持されているかどうかにかかわってきます。

なので、URIにSIDが埋め込まれるかどうかには関係ありません。

つまり、URIにSIDは埋まってるけど、期限切れみたいな。


クローラーがアクセスしたときだけsession.use_only_cookiesを有効にできないですか?

このやりかただとクローラー判定ロジックにバグがあったらセキュリティホールになりますが、、、

session.use_only_cookiesを有効にできないなら、理由を教えていただくと解決のヒントになるかも。

id:hhashimo

クローラーがアクセスしたの時だけsession.use_only_cookiesを有効にしてみましたが、結果に変化がありません。それでもセッションIDが付くということはクローラーはクッキーを使っていて、かつ、そのクッキーが消えずに残ってるということでしょうか。session_start()はやはり無効にした方が良いです。それでもダメだったのは、session_registr()を無効にしていなかったからでは?とようやく気付きました。現在まだ調査中です。

2006/01/24 19:51:57

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません