ホームページ  >  記事  >  バックエンド開発  >  PHP セッション トラッキング 2 (42)

PHP セッション トラッキング 2 (42)

WBOY
WBOYオリジナル
2016-08-08 09:23:12905ブラウズ

セッション

セッションとは
??セッションは、ユーザーがページにアクセスした時点から開始され、ユーザーがWebサイトから切断した時点で終了し、セッションのライフサイクルを形成します。セッション中、クライアントには、現在のユーザーを識別し、他のユーザーと区別するための一意の SessionID が割り当てられます。
?? セッション中、セッション ID はクライアントとサーバーの 2 つの場所に保存されます。クライアントの場合は、一時 Cookie を使用して保存するか、URL 文字列を介して渡されます。サーバーも、指定されたセッション ディレクトリにテキスト ファイルの形式で保存されます。
??セッションは ID を通じて各アクセス要求を受け入れることで、現在のユーザーを識別し、ユーザー固有の情報とセッション変数 (セッション アクティビティ中に、数値またはテキスト情報をセッションに保存できます) (session_name など) を追跡および維持します。これらのVariable情報はサーバー側に保存されます。
??SessionID はセッション永続化のためのセッション情報としてデータベースに保存できるため、各ユーザーのログイン時間、オンライン状態、オンライン時間などを追跡できます。

PHP における Cookie とセッションの違い:

Cookie とセッションはどちらも、複数のページで使用される変数を一時的に保存できますが、本質的な違いがあります。
??Cookie はクライアントのブラウザに保存され、
??セッションはサーバーに保存されます。
??それらの間の接続はセッション ID であり、通常は Cookie に保存されるか、URL に配置されます。
??Cookie を無効にする方法: (IE の [ツール] - [インターネット オプション] をクリックし、ポップアップ ダイアログ ボックスの [セキュリティ] - [レベルのカスタマイズ] をクリックし、[会話ごとに Cookie を許可する] を [無効] に設定します)

簡単なセッションの実装

セッションを使用するための基本的な手順は次のとおりです:
??セッションを開始する
??セッション変数を登録する
??セッション変数を使用する
??変数の登録を解除してセッションを破棄する

1 開始セッション

session_start(): セッションを開始するか、既存のセッションを返します。
注: この関数にはパラメータがなく、戻り値は true です。 Cookie ベースのセッションを使用する場合、session_start() を使用する前にブラウザーに出力を含めることはできません。そうしないと、次のエラーが発生します:
警告: セッション キャッシュ リミッターを送信できません - ヘッダーはすでに送信されました (出力は /usr/local/ で開始されました) apache /htdocs/cga/member/1.php:2)…………

2 セッション変数を登録します

PHP5は、$_SESSION['xxx']=xxxを使用してSESSIONグローバル変数を登録します。 GET、POST、COOKIEの使用方法は同様です。
??注: session_register()、session_unregister()、session_is_registered() は、php.ini で register_globle が on に設定されていない限り、php5 では使用されなくなりました。ただし、セキュリティ上の理由から、 register_globle をオフにすることを強くお勧めします。 HTTP_SESSION_VARS の使用は推奨されなくなり、代わりに $_SESSION を使用することが公式に推奨されています。

3 セッション変数の使用

セッション変数を特定のスコープ内で使用できるようにするには、まず session_start() 関数を使用してセッションを開始する必要があります。このようにして、この変数には $_SESSION スーパー グローバル配列を通じてアクセスできます。

例: echo $_SESSION[‘myvar’];
?? 使用する前に、変数が登録されたセッション変数であるかどうかを確認してください。
if(isset($_SESSION[‘myvar’]))

4 page1.php

<?<span>php
session_start(); </span><span>//</span><span>使用SESSION前必须调用该函数。</span>$_SESSION[‘name’]=”我是黑旋风李逵!”; <span>//</span><span>注册一个SESSION变</span><span>量
$_SESSION[‘passwd’]</span>=<span>”mynameislikui”;
$_SESSION[‘time’]</span>=<span>time();
echo ‘<br</span>/><a href=<span>“page2.php”>通过COOKIE传递SESSION
<</span>/a>’; <span>//</span><span>如果客户端支持cookie,可通过该链接传递session到</span><span>下一页。
echo ‘<br</span>/><a href=“page2.php?<span>’. SID . ‘”>通过URL
传递SESSION<</span>/a>’;<span>//</span><span>客户端不支持cookie时,使用该办法传递</span><span>session.
</span>?>

session_id

session_id()は、現在のsession_idを設定または取得するために使用されます。 php5 では、session_id() を使用するか、URL に添付された SID を通じて現在のセッションの session_id と session_name を取得できます。

??session_id() に特定の値がある場合、現在の SESSIONID 値が置き換えられます。
Cookie が無効になっていない場合、session_id() 値が指定されている場合、session_start() が開始されるたびに Cookie 値がクライアントに送信されます。現在の SESSIONID が指定された値と等しいかどうかは関係ありません。
??session_id() に値が指定されていない場合は、現在の SESSIONID が返されます。現在のセッションが開始されていない場合は、空の文字列が返されます。
??セッションを開始する前にこの関数を使用する必要があります: session_start();

<span>查看当前SessionID
</span><?<span>php
session_start();
echo &ldquo;当前的session id 为:&rdquo;.session_id();
</span>?><span>??设置SessionID
</span><?<span>php
session_id(&ldquo;ABC2008&rdquo;);</span><span>//</span><span>必须在session_start()之前</span><span>session_start();
echo &ldquo;修改的session id 为:&rdquo;.session_id();
</span>?>

session_id を変更しても情報には影響しません

??session_regenerate_id() は、変更が成功した場合は true を返し、失敗した場合は false を返します。

??この関数を使用すると、現在のセッションで SESSIONID を置き換えることができますが、現在のセッションの他の情報は変更されません。

<?<span>php
session_start();
$old_sessionid</span>=<span> session_id();
session_regenerate_id();
$new_sessionid</span>=<span> session_id();
echo </span><span>"</span><span>原始SessionID: $old_sessionid<br/></span><span>"</span><span>;
echo </span><span>"</span><span>新的SessionID: $new_sessionid<br/></span><span>"</span><span>;
echo</span><span>"</span><span><pre></span><span>"</span><span>;
print_r($_SESSION);
echo</span><span>"</span><span></pre></span><span>"</span><span>;
</span>?>

session_name

session_name() は、現在のセッションの名前を返すか、現在のセッションの名前を変更します。

??現在のセッションの名前を変更したい場合は、session_start() の前にこの関数を呼び出す必要があります

。注: session_name は数字だけで構成することはできません。少なくとも 1 つの文字を含める必要があります。それ以外の場合は、

新しいセッション ID が常に生成されます。
セッション名の変更の例:

<?<span>php
$previous_name</span>= session_name(<span>"</span><span>WebsiteID</span><span>"</span><span>);
session_start();
echo </span><span>"</span><span>新的session名为:$previous_name<br/></span><span>"</span><span>;</span>?>


セッションのクロスページ転送の問題

セッションのクロスページ転送では、次の 3 つの状況を考慮する必要があります:

??クライアントの Cookie が無効になっています。 。

??ブラウザに問題があり、Cookie に一時的にアクセスできません

??php.ini の session.use_trans_sid= 0 または

コンパイル時に --enable-trans-sid オプションがオンになっていません

3 つセッションのクロスページ転送方法の問題を解決するためのヒント

1、设置php.ini中的session.use_trans_sid= 1或者编译时打开打开了--enable-trans-sid选项,让PHP自动跨页传递session id。
??2、手动通过URL传值、隐藏表单传递session id。
??3、用文件、数据库等形式保存session_id,在跨
页过程中手动调用。

  1 解决会话传递问题

<span>page1.php
??<</span>?<span>php
session_start();
$_SESSION[‘var1’]</span>=<span>“中华人民共和国”;
$url</span>=“<a href=‘s2.php’>下一页</<span>a>”;
echo $url;
</span>?<span>><br></span>

<span>??page2.php
??<</span>?<span>php
session_start();
echo “传递的session变量var1的值:”.$_SESSION[‘var1’];
</span>?<span>>
??现在你手动关闭客户端的cookie,再运行就得不到结果了</span>

  2 第一种途径

设置php.ini中的session.use_trans_sid= 1
??编译时打开打开了--enable-trans-sid选项”
??注:Linux适用,Windows不适用

以上就介绍了PHP会话跟踪二(42),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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