ホームページ > バックエンド開発 > PHPチュートリアル > session.use_trans_sid PHPセッションのセッションIDとCookie

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-23 13:43:37
オリジナル
1122 人が閲覧しました


添付ファイル: 要約

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

なぜこれが起こっているのでしょうか?以下に説明します:

セッションはサーバー側に保存されます (デフォルトではセッションはファイルとして保存されます)。クライアントから提供されたセッション ID に従って、ユーザーのファイルが取得され、変数の値が取得されます。セッション ID はクライアントの Cookie または Http1.1 を使用できます。プロトコルの Query_String (アクセスされた URL の "?" 以降の部分) がサーバーに送信され、サーバーはセッション ディレクトリを読み取ります。つまり、セッション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 で session.use_trans_sid = 1 を設定します。 .ini を有効にするか、コンパイル中に --enable-trans-sid オプションをオンにして、PHP がページ間でセッション ID を自動的に渡すことができるようにします。
2. URL を通じて値を手動で渡し、非表示のフォームを通じてセッション ID を渡します。
3. session_id をファイル、データベースなどに保存し、クロスページプロセス中に手動で呼び出します。

パス 1 の例:

s1.php

session_start();
$_SESSION['var1']="中華人民共和国"; . ""s2.php"";
echo $url; >

echo "渡されたセッション変数var1 の「.$_SESSION['var1'];

?>

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

ルート 2 の例 説明:

s1.php

session_start();

$_SESSION['var1']="中華人民共和国"

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

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

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

パス 3 の例:

login.html







ユーザー名:
パスワード: ;br>



$name=$_POST['name'];
$pass=$_POST['pass'];
if(!$name || !$pass) {
echo "ユーザー名またはパスワードが空です、再度ログイン"; die();

}

if (!($name=="youngong" && $pass=="123") {

echo "ユーザー名またはパスワードが間違っています。再度ログインしてください";

die();

}
//登録ユーザー
ob_start();
session_start() ;
$_SESSION['user']= $name;
$psid=session_id();
$fp=fopen("e:/tmp/phpsid.txt","w+";
fwrite($fp,$psid ) ;
fclose($fp);
//認証が成功しました、関連する操作を実行します
echo "ログイン
"
echo "次のページ< /a>

?>

mylogin2.php

$fp=fopen("e:/tmp/phpsid.txt","r";
$sid=fread($fp ,1024);
fclose($fp);

session_id($sid);

if(isset($_SESSION['user']) && $_SESSION['user']="laogong" {

echo "すでに記録されていますin!";

}

else {

//関連操作を実行するために正常にログインしました
echo "ログインしていません。アクセス権がありません";
echo "Please
ログイン< ;/ a>後で閲覧";
die();
}

?>

Cookie テストもオフにしてください、ユーザー名: youngong パスワード: 123 これは、セッション ID をファイルに保存するためのもので、ファイルは次のとおりです: e : mpphpsid .txt、システムに応じてファイル名またはパスを決定してください。

データベース方式については、例は挙げませんが、ファイル方式と同様です。

要約すると、上記のメソッドには 1 つの共通点があります。それは、前のページでセッション ID を取得し、それを次のページに渡す方法を見つけることです。 session_start(); コードは次のページにあります。 );
=================================== ========== =====================

また、私の php.ini ファイルは 2 つの場所に保存されています: 1.c :/php4/php.ini 2. c:/winnt/php.ini、私のプログラムは c:/php4/php.ini のみを認識するようで、winnt での php.ini への変更は効果がありません。

どのphp.iniが動作するかわかりません。面倒ですが、2つのファイルを同時に変更すると問題が解決します。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート