ホームページ >バックエンド開発 >PHPチュートリアル >PHP セッション変数を次のページに渡すことはできません

PHP セッション変数を次のページに渡すことはできません

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

PHP セッション変数を次のページに転送できません

PHP セッション変数の値は異なるページ間で受け渡すことはできませんか?
この問題の理由は次のとおりです:?
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 を無効にすることがよくあります。実際、PHP プログラムでは、クライアントが Cookie をオンにするかどうかに関係なく、Cookie の代わりに SESSION を使用できます。 ?

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

1. php.ini で session.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();?
$_SESSION['var1']="中華人民共和国";?
$sn = session_id();?
$ url ="次のページ";?
echo $url;?
?> ; ?


s2.php?

コードをコピーしますコードは次のとおりです:

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


フォームを非表示にする基本原則は上記と同じです。 ?

パス 3 の例: ?

login.html?

コードをコピーしますコードは次のとおりです:


?
?
?
ログイン?
?
?
< body>?
ログインしてください:?
?
ユーザー名:
?
パスワード:
?
?
?
?
?


mylogin1.php?

コードをコピーしますコードは次のとおりです:


$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:tmpphpsid.txt","w ";?
fwrite($fp,$psid);?
fclose($fp);?
//本人確認が成功しました。関連する操作を実行します?
echo "ログイン
";?
echo "次のページ";?

?>?


mylogin2.php?

コードをコピーしますコードは次のとおりです:
$fp=fopen("e:tmpphpsid.txt","r";?
$sid=fread($fp,1024);?
fclose($ fp);?
session_id($sid);?
session_start();?
if(isset($_SESSION['user']) && $_SESSION['user']="laogong" { ?

echo "すでにログインしています!";?
}?
else {?
//関連する操作を実行するために正常にログインしました?
echo "ログインしていません、いいえアクセス権"; ?
echo "ログイン して閲覧してください";?
die();?
}?

?>?


Cookie テストもオフにしてください。 ユーザー名: youngong パスワード: 123 ファイルは次のとおりです: e: mpphpsid.txt。独自のシステムに従ってください。 ?

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

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

の前にコード session_id (渡されたセッション ID) を追加します。 /21131.htm

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。