ホームページ  >  記事  >  バックエンド開発  >  session.use_trans_sid PHPセッションのセッションIDとCookie

session.use_trans_sid PHPセッションのセッションIDとCookie

WBOY
WBOYオリジナル
2016-06-13 12:11:29873ブラウズ

session.use_trans_sid php セッションのセッション ID と Cookie


添付ファイル: 要約

================================================= ============
PHP で SESSION を使用している友人は、ページ間で SESSION 変数を渡すことができないという問題に遭遇する可能性があります。この問題に数日間悩みましたが、最終的に情報を調べて考え、解決しました。この問題の原因は次のとおりだと思います。
1. クライアントで Cookie が無効になっている
2. ブラウザーに問題があり、一時的に Cookie にアクセスできない
3. php.ini のセッション。 use_trans_sid = 0 または

のコンパイル時に --enable-trans-sid オプションがオンになっていませんでした。なぜこのようなことが起こっているのでしょうか?以下に説明します:

セッションはサーバー側に保存されます (セッションはデフォルトでファイルとして保存されます)。ユーザーのファイルは、クライアントによって提供されたセッション ID と変数の値に従って取得されます。セッション ID はクライアントの Cookie を使用することもできます。または、Http1.1 プロトコルの Query_String (アクセスされた URL の「?」以降の部分) がサーバーに送信され、サーバーはセッション ディレクトリを読み取ります。 。つまり、session id は、サービスに保存されているセッション変数を取得するための ID カードです。 session_start(); コードが実行されると、サーバー上にセッション ファイルが生成され、それに一意に対応するセッション ID が生成され、生成されたセッション ファイルに特定の形式で格納されるように定義されます。セッション ID を通じて、定義された変数を取得できます。ページを通過した後、セッションを使用するには、session_start() を再度実行する必要があります。別のセッション ファイルが生成され、それに応じて、このセッション ID を使用して最初のセッション ファイルを取得することはできません。このセッション ID はそれを開くための「キー」ではないため、変数は入力されます。 session_start(); の前にコード session_id($session id); を追加すると、新しいセッション ファイルは生成されず、この ID に対応するセッション ファイルが直接読み取られます。

PHP のセッションは、デフォルトでクライアントの Cookie を使用してセッション ID を保存するため、クライアントの Cookie に問題があるとセッションに影響します。セッションは必ずしも Cookie に依存する必要はないことに注意してください。これが、Cookie と比較したセッションの優れた点でもあります。クライアントの Cookie が無効になっている場合、または問題が発生している場合、PHP は自動的にセッション ID を URL に付加し、セッション ID を介してセッション変数をページ間で使用できるようにします。ただし、この添付ファイルには特定の条件もあります。つまり、「php.ini の session.use_trans_sid = 1、またはコンパイル中に --enable-trans-sid オプションがオンになっている」です。

フォーラムを使用したことのある友人は、フォーラムに参加するときに、Cookie がオンになっているかどうかを確認するメッセージが頻繁に表示されることを知っています。これは、ほとんどのフォーラムが Cookie に基づいており、フォーラムは Cookie を次の目的で使用するためです。ユーザー名やパスワードなどのユーザー情報を保存しておくと便利です。そして多くの友人は、Cookie は安全ではないと考えており (実際には安全ではありません)、Cookie を無効にすることがよくあります。実際、PHP プログラムでは、クライアントが Cookie をオンにするかどうかに関係なく、Cookie の代わりに SESSION を使用できます。

したがって、Cookie を脇に置いてセッションを使用できます。つまり、ユーザーが Cookie を閉じたと仮定して、セッションを使用します。これを実現するには、いくつかの方法があります。

1. php.ini でセッションを .use_trans_sid = 1 に設定するか、コンパイル時に --enable-trans-sid オプションを有効にして、PHP がページ間でセッション ID を自動的に受け渡せるようにします。
2. URL を通じて値を手動で渡し、非表示のフォームを通じてセッション ID を渡します。
3. session_id をファイル、データベースなどに保存し、クロスページ プロセス中に手動で呼び出します。

パス 1 の例:

s1.php

session_start()
$_SESSION['var1']="中华人民共和国";
$url="次のページ";
echo $url;
?>

s2.php

session_start();
echo "渡されたセッション変数 var1 の値は次のとおりです: ".$_SESSION['var1']; >?>

クライアントの Cookie が正常であれば、結果「中華人民共和国」が得られるはずです。

ここで、クライアント上の Cookie を手動で閉じて再度実行すると、結果が得られない可能性があります。結果が得られない場合は、php.ini で session.use_trans_sid = 1 を設定するか、コンパイル時に --enable-trans-sid オプションをオンにすると、「中華人民共和国」という結果が得られます。 🎜>

パス 2 の例:

s1.php

session_start(); ']="中華人民共和国";

$sn = session_id();
$url="次のページ";
echo $url;
?>

s2.php

session_id($_GET[ 's']);

session_start();

echo "渡されたセッション変数 var1 の値は次のとおりです。

;フォームを非表示にする方法の基本原理は上記と同じです。

パス 3 の例:

login.html



ログイン</ title> <br><meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <br><body> in : <br><form name="login" method="post" action="mylogin1.php"> <br>ユーザー名:<input type="text" name="name"><br> ; <br>パスワード:<input type="password" name="pass"><br> <br><input type="submit" value="ログイン"> ; <br></body> <br><br>mylogin1.php <br><br>$name=$_POST['name ']; <br>$pass=$_POST['pass']; if(!$name || !$pass) { <p>echo "ユーザー名またはパスワードが空です。<a href= " login.html">再度ログイン</a>" </p>die() <p>} </p>if (!($name=="youngong" && $pass=="123") { <p>echo "ユーザー名またはパスワードが間違っています。<a href="login.html">再度ログインしてください</a>"; <br>die() <br>} <br>; user<br>ob_start(); <br>$_SESSION['user']= $name; <br>$fp=fopen(); /tmp/phpsid.txt","w+"; <br>fwrite($fp,$psid); <br>fclose($fp); <br>//認証成功、関連操作を実行<br> echo "Logged in<br>"; <br>echo "<a href="mylogin2.php">次のページ</a>"; <br><br>?> <br><br>mylogin2.php <br><br><?php <br>$fp=fopen("e:/tmp/phpsid.txt","r"; <br>$sid=fread($fp,1024 ); <br>fclose ($fp); </p>session_id($sid); <p>if(isset($_SESSION['user']) && $_SESSION['user'] ="laogong" { </p> <p>echo "すでにログインしています!"; </p>} <p>else { <br>//関連する操作を実行するために正常にログインしました<br>echo "ログインしていません。アクセス権がありません"; >echo "<a href="login.html">ログイン</a> <br>die()>} <br> Cookie テストもオフにしてください。ユーザー名: youngong パスワード: 123 ファイルは次のとおりです: e: mpphpsid.txt ご使用のシステムに応じてファイル名またはパスを決定してください。 <br><br>データベース方式については例を挙げませんが、ファイル方式と同様です。 </p> <p>要約すると、上記のメソッドには共通点が 1 つあります。それは、前のページでセッション ID を取得し、それを次のページに渡す方法を見つけることです。 session_id というコードを追加します (それを渡します)。 ) 次のページの session_start() コードの前にあります。<br>============================ =============== ===========================<br><br><br>また、php.ini ファイルは 1.c:/php4/php.ini 2.c:/winnt/php.ini の 2 つの場所に保存されており、私のプログラムは c:/php4/php.ini のみを認識するようです。 winnt の下の php.ini への変更は効果がありません !!! <br>どちらの php.ini が機能しているかわからない場合は、面倒ですが、両方のファイルを同時に変更するのが最善です。問題を解決できます。<br><br></p> <p></p> <p></p> </div></div> </div></div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="百度に配属されるのは信頼できる仕事だと思いますか?神に答えを求めてください" href="http://m.php.cn/ja/faq/204237.html">百度に配属されるのは信頼できる仕事だと思いますか?神に答えを求めてください</a></span><span>次の記事:<a class="dBlack" title="百度に配属されるのは信頼できる仕事だと思いますか?神に答えを求めてください" href="http://m.php.cn/ja/faq/204241.html">百度に配属されるのは信頼できる仕事だと思いますか?神に答えを求めてください</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="http://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ul class="nphpXgwzList"><li><b></b><a href="http://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/2.html" title="正規表現内のすべての式記号 (概要)" class="aBlack">正規表現内のすべての式記号 (概要)</a><div class="clear"></div></li></ul></div></div><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!</p></div><div class="footermid"><a href="http://m.php.cn/ja/about/us.html">私たちについて</a><a href="http://m.php.cn/ja/about/disclaimer.html">免責事項</a><a href="http://m.php.cn/ja/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>