session_start()で生成されるセッションIDの選定方法と重複の可能性について

このQ&Aのポイント
  • session_start()で生成されるセッションIDはランダムな文字列であり、重複する可能性は低い
  • セッションIDの生成方法については公式ドキュメントに詳細が記載されている
  • 生成されるセッションIDは仕組み的には同一のIDが重複することはない
回答を見る
  • ベストアンサー

session_start()で生成されるセッションIDは、どのように選定されている?

いつもお世話になっております。 PHP5.2.5 session_start(); とすると、「ランダムと思える長めの文字列」がセッションIDとして生成されます。 例えば、 世界の人々が訪れる大手サイト等でセッションを利用する場合、 session_start()の際、生成されるランダム文字列に重複が生じ、 異なる複数の人間に、同一のセッションIDを持たせてしまう、 なんてことは起こらないのでしょうか? この回答として、 「確実に無いわけではないが、無視できる程度の確率」であるのか、 はたまた、 「仕組み的に、確実に(100%)同一セッションIDは生成されない」であるのか、 このあたりをどなたか教えて下さい。(質問1) また、PHPのsession_start()によって生成されるセッションIDは どのような仕組みで、この文字列は選定されているのでしょうね? どこかに記載はありましたでしょうか。 (質問2) もし何かお分かりでしたら、ご助言を宜しくお願い致します。

  • march4
  • お礼率83% (628/754)
  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.1

古い記事ですが参考にまったく同様の質問がなされています。参考になるかもしれません。 http://ml.php.gr.jp/pipermail/php-users/2001-July/000705.html

march4
質問者

お礼

なかなか難しい記事でしたが、 >「確実に無いわけではないが、無視できる程度の確率」 ということのようですね。 参考になりました。ありがとうございます。

関連するQ&A

  • セッションの仕組み

    php初心者です セッションの仕組みを教えてください 質問1 セッションidとセッションクッキーは同じものですか? 質問2 セッションidやセッションクッキーはデフォルトでは、ブラウザを閉じた時に削除されますか? 質問3 レンタルサーバーのphp.iniを調べてみたところ 保存場所がsession.save_path no valueでした。この場合、訪問者のパソコンにクッキーが保存されてしまうのでしょうか?サーバーに保存する方法はありますか? 質問3 session_start();でセッションを開始したときセッションidが自動で付けられるのはわかりましたが、 セッションid(MD5で作られた数字)の使い道がわかりません 質問4 セッションidはどこに利用すればいいのでしょうか? session_start(); session_id(); //このセッションidの利用方法がわかりません $_SESSION['id'] = $_POST['id']; よろしくお願いします

    • ベストアンサー
    • PHP
  • session_startについて

    初心者です。 以下のように、ログイン時、設定画面adminpage.htmlに行くように作っています。 sakuraインターネットでは動くのですが、 もう一方の違うサーバーでは、login.phpに戻ってきてしまいます。 原因が判りません。 手がかりが欲しいのですが、 お詳しい方がおられましたら教えてください。 よろしくお願い致します。 <?php require("MySmarty.class.php"); require('Settings.class.php'); $smarty = new MySmarty(); $settings = new Settings; session_start(); $id = $_SESSION['id']; $pass = $_SESSION['pass']; //idとパスワードに不具合有れば、login.phpへ戻る。 if( ( $id == '' ) || ( !$settings->isValidUser($id,$pass) ) ){ header("Location: login.php" ); print $_SESSION["id"]; print $_SESSION["pass"]; print $id; print $pass; exit; } $settings->loadSettings(); $smarty->assign('maintitle', $settings->maintitle); $smarty->assign('subtitle', $settings->subtitle); $smarty->assign('error_message', $settings->errorm); $smarty->display('adminpage.html'); ?>

    • ベストアンサー
    • PHP
  • セッションに関して質問が御座います、

    現在、ログイン関係のプログラムのテストをPHPにて製作しています。 PCと携帯電話に対応させるためセッションを状況によって使い分けるようにしました、 内容としては↓ (1)クッキーが使えるか判断する→使える場合は普通にセッションスタート。 (2)クッキーが使えない場合は40桁の0~9、a~b、A~Bの乱数を生成してセッションIDとしてセッションスタート。 以上の二つを行ってセッションをスタートさせる事にしました。 (1)の方は問題なく動作しましたが問題なのは(2)の方です。 ランダムな値をセッションIDにセットしてセッションスタート、同時にセッションに値を入れてセッションIDをGETで送信、 受け取り側ではGETでセッションIDを受け取ってそのIDでセッションスタートするのですがセッションに入れた値が上手く取れません、恐らく空になっていると思われます。 受け取り側の方でセッションをスタートさせた状態で「session_id()」を使い確認したところ設定したセッションIDは問題なく表示されています、 これはセッションスタートは問題なく行えたと考えて宜しいのでしょうか? また、セッションに値を入れる時も取り出す時も(1)と(2)は同じ方法です、違うのはセッションスタートの時だけです。 (ランダムな値をセッションIDにセット、GETでセッションIDを受け取った場合はそのセッションIDでセッションスタート) テストではAUはCookie使用可能だったので問題なし、DoCoMoではCookie使用不可なので動作せず、しかしサーバー環境によって正常に動作します。 一部のサーバーでは正常に動作するのでプログラム自体は問題無いと思うのですが……。 良い解決策などありましたら教えて下さい、宜しくお願い致しますm(_ _)m

    • ベストアンサー
    • PHP
  • セッションIDの取得方法

    <?php session_start(); echo 'start session:' . $_COOKIE[session_name()]; これを実行すると、初回のみセッションIDが取得できず空となってしまいます。 どうすると初回からセッションIDを取得できるんでしたでしょうか? ご教示下さい。

    • ベストアンサー
    • PHP
  • 一意(ユニーク)かつ、ソートに対してランダムなIDの発行方法

    随時増加するあるデータに対して、一意なIDを割り当ててゆきます。 通常は、1, 2, 3, … と連番を割り当てて行けば一意なIDになると思います。 その上で、IDでソートした時に発行順に並ぶのではなく、順番がランダムになるようにしたいのです。 (アルゴリズムを知らない人から、発行順を推測されないようにしたい。) そこで考えたのが、"1", "2", "3", …という文字列に対するハッシュ(SHA1やMD5)ですが、sha1("1"), sha1("2"), sha1("3"), …とIDを発行していった場合、IDが重複してしまう可能性を心配しています。(とても低い確率ではあることは分かっていますが、皆無ではありません。) ハッシュ関数を利用する他に、「一意」で「ランダム」で「衝突の可能性がゼロ」である文字列の生成方法はありませんでしょうか?(可能性がゼロというのは物理的に不可能だと思うので、例えばSHA-1であれば、160bitのハッシュが生成されますが、2^160個のIDを発行しても重複しない、ということを考えます。) 一応、規模は1000万ID程度を考えていますが、もっと大きなオーダーでも衝突しないに越したことはありません。

  • sessionうまくいかない

    sessionの勉強のためにphpで簡単なページを作ってみたのですが、 sessionIDが次のページに送れてないみたいで、うまくいきません。 1ページ目 @session_start(); print session_id(); $_SESSION["ID"]=session_id(); 2ページ目 @session_start(); print session_id(); sessionの記述はこのようにしています。 環境は Windows Vista IE7 PHP5 Apache2.2 です。 よろしくお願いします。

    • 締切済み
    • PHP
  • セッションIDの最大バイト数

    PHPではセッションIDが自動で生成されますが、 そのときのセッションIDの最大バイト数が知りたいです。 どなたかご存知の方がいらっしゃいましたら、 ご教示ください。 よろしくお願いします!! m(_ _)m

    • ベストアンサー
    • PHP
  • セッションidの使い方について

    参考書を読んだり調べたのですが、セッションidの使い方がよくわからないので質問させて下さい。 PHP4.3.10、 session.use_only_cookies off session.use_trans_sid offになっています。 携帯でログイン(login.php)後 メニュー(menu.php)でDBに登録されているIDとパスワードが一致したら SIDを発行してユーザの識別をしたいと考えています。 そこでわからないことがあります。 メニューにはA.php、B.php・・とあるのですが リンクするたびに <a href="A.php?<?php echo SID;?>">A.php</a> <a href="B.php?<?php echo SID;?>">B.php</a> のようにするのか、または$SID=session_id();のようにするのでしょうか。 そしてA.phpやB.phpでの識別はSIDをファイルなどに保存してその都度 これを呼び出し比較していくのでしょうか。 また、$_SESSION['a']="123";と session_register("a"); $a="123"; というのは同等の意味でしょうか。 質問ばかりですがどうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのセッションIDについて

    PHP5.3.14を使っています。 セッションについて勉強中です。 セッションを使ってページの表示回数をカウントアップするソースと、 そのセッションを破棄するソースの2種類を用意しました。 ※それぞれ、session_id()をecho表示しています。 クッキーを使った状態でこれらを動かすと、 リセットする(リンクを押してリロードする)度にセッションIDが変わるのですが、 クッキーを使わずに定義済み定数SIDを使って動かすと、 カウント値は元に戻るのですが、 リセットしてもセッションIDが変わりません。 どうすれば、新しいセッションIDを発行(SIDの値を更新)できるのでしょうか? よろしくお願いします。 【以下、ソース2種類と、iniファイルの一部です】 ●up.php <?php session_start(); if (empty($_SESSION['count'])) { $_SESSION['count'] = 1; } else { $_SESSION['count']++; } echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); ?> <p> <?php echo $_SESSION['count']; ?> 回目。 </p> <p><a href="up.php">カウントアップ</A> </p> <p> <a href="reset.php">リセット</A> </p> ●reset.php <?php session_start(); echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); echo ("##### ". $_SESSION['count']."回表示しました。</br>"); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } if(isset($_REQUEST[session_name()])){ $_REQUEST[session_name()]="" ; } session_destroy(); ?> <p> <a href="up.php">初めからカウントする</A> </p> ●php.ini (クッキーを使わずSIDを使うを設定) session.use_trans_sid = 1 session.use_only_cookies=0 session.use_cookies=0

    • 締切済み
    • PHP
  • session_start() PHP5.3.5

    PHPでは、session_start()の前に、文字を出力してはいけないはずですが、 ---- ここから ---- aaaaaaaaaa <?php session_start(); echo $_SESSION['time']; $_SESSION['time'] = time(); ?> <form action="sesTest.php"> <input type="submit" value="Push Me" /> </form> ---- ここまで ---- が動いてしまいます。 動くのは、別に構わないのですが いつから、OKになったんでしょう? 後、このことを保証するドキュメントなんてないですかね? なお、CLIで動かすと・・・セッションなんで関係ないはずですが、昔どおりのWarningが出ます

    • ベストアンサー
    • PHP

専門家に質問してみよう