解決策を求めて

WBOY
リリース: 2016-06-13 13:31:56
オリジナル
868 人が閲覧しました

解決策を探しています
解決策を探しています: 互換性のあるクライアントは Cookie を受け入れず、サーバーは負荷分散を行い、検証コードが利用可能であることを確認します

------解決策------ ---------------
次にセッションを使用し、SESSIONID を手動で渡すだけです
同様の記事を見つけました。そこから学ぶことができます

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

パス 1 に例を示します。

s1.php

<?php
セッション開始();
$_SESSION[’var1’]="中華人民共和国";
$url="<a href=".""s2.php">次のページ</a>";
$url をエコーし​​ます。
?>

s2.php

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

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

 

パス 2 に例を示します。

s1.php

<?php
セッション開始();
$_SESSION[’var1’]="中華人民共和国";
$sn = セッションID();
$url="<a href=".""s2.php?s=".$sn."">次のページ</a>";
$url をエコーし​​ます。
?>

s2.php

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

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

アプローチ 3 の例:

ログイン.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<title>ログイン</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

ログインしてください:
<フォーム名="ログイン" メソッド="ポスト" アクション="mylogin1.php">
ユーザー名:<input type="text" name="name"><br>
パスワード:<input type="password" name="pass"><br>
<input type="submit" value="ログイン">
</フォーム>
</ボディ>
</html>

mylogin1.php

<?php

$name=$_POST['名前'];
$pass=$_POST['パス'];
if(!$name || !$pass) {
echo "ユーザー名またはパスワードが空です。<a href="login.html">再度ログインしてください</a>";
死ぬ();
}
if (!($name=="youngong" && $pass=="123") {
echo "ユーザー名またはパスワードが間違っています。<a href="login.html">再度ログインしてください</a>";
死ぬ();
}
//ユーザーを登録する
ob_start();
セッション開始();
$_SESSION['ユーザー']= $name;
$psid=セッションID();
$fp=fopen("e:tmpphpsid.txt","w+";
fwrite($fp,$psid);
fclose($fp);
//本人確認が成功したので、関連する操作を実行します
echo "ログイン<br>";
echo "<a href="mylogin2.php">次のページ</a>";

?>

mylogin2.php

<?php
$fp=fopen("e:tmpphpsid.txt","r";
$sid=fread($fp,1024);
fclose($fp);
セッションID($sid);
セッション開始();
if(isset($_SESSION[’user’]) && $_SESSION[’user’]="laogong" {

エコー「ログインしました!」;
}
それ以外 {
// ログインに成功すると、関連する操作が実行されます。
echo "ログインしていません。アクセス権がありません";
echo "<a href="login.html">ログイン</a>して閲覧してください";
死ぬ();
}

?>

Cookie テストもオフにしてください。ユーザー名: youngong パスワード: 123 ファイルを通じてセッション ID を保存します。ファイル名またはパスは、ご使用のシステムに応じて決定してください。

データベースの使用方法については、ファイルの使用方法と同様であり、例は示しません。

要約すると、上記のメソッドには 1 つの共通点があります。それは、前のページでセッション ID を取得し、それを次のページに渡す方法を見つけることです。 session_start( の前にコード session_id (渡されたセッション ID) を追加します。 ); 次のページのコード<div class="clear"></div>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!