<p>引き続き<a href="http://p0t.jp/mt/archives/2005/07/web_4.html">セッションIDかぶっちゃう問題</a>。</p>
<blockquote><p><a title="p0t: PHPのセッションID3" href="http://p0t.jp/mt/archives/2005/07/web_4.html">p0t: PHPのセッションID3</a></p>
<p>一度session_id()を取得するんじゃなくて、</p>
<p>session_id(md5($_SERVER[‘SERVER_ADDR’].uniqid(rand(),1)));</p>
<p>とかやるのはどうですか?<br />
某所でこんなコードを書いたことがあって、正解かどうか激しく気になります。正解でしょうか?教えてください。</p>
<p>あと、$_SERVERの値って、php.iniやらの設定で取れないことあるよね。そんな時どうしよう。どうしよう・・・</p>
<p>投稿者 kかべ : 2005年07月12日 14:16</p></blockquote>
<p>kかべさんのこの案が素敵な感じがします。<br />
調べてみると<strong>セッションID発行</strong>と<strong>md5(uniqid(””””,1))</strong>はほぼ等価っぽいので正解なのではないでしょうか!</p>
<p>php-4.3.11/ext/session/session.c</p>
<pre class="prettyprint"><code>sprintf(buf, &quot;%ld%ld%0.8f&quot;, tv.tv_sec, tv.tv_usec, php_combined_lcg(TSRMLS_C) * 10);
PHP_MD5Update(&amp;context, buf, strlen(buf));</code></pre>
<p>php-4.3.11/ext/standard/uniqid.c</p>
<pre class="prettyprint"><code>if (more_entropy) {
sprintf(uniqid, &quot;%s%08x%05x%.8f&quot;, prefix, sec, usec, php_combined_lcg(TSRMLS_C) * 10);
} else {
sprintf(uniqid, &quot;%s%08x%05x&quot;, prefix, sec, usec);
}</code></pre>
<p>$_SERVERはどういうとき使えないんでしたっけ。その場合は、どうしよう・・・。</p>
<p>ref: <a href="http://p0t.jp/mt/archives/2005/07/web_4.html">PHPのセッションID3</a></p>