クッキーとセッションの違いについて詳しく説明した記事を共有して、困っている友達が参考にしてください。 Cookieはユーザーを識別するためによく使用されます。 Cookie は、サーバーがユーザーのコンピュータ上に残す小さなファイルです。同じコンピュータがブラウザを通じてページをリクエストするたびに、Cookie も送信されます。 PHP を使用すると、Cookie 値を作成および取得できます。
PHP は SetCookie 関数を使用して Cookie を設定します。
SetCookie 関数は Cookie を定義し、それを HTTP ヘッダーの末尾に追加します。 SetCookie 関数のプロトタイプは次のとおりです。
int SetCookie(文字列名、文字列値、int 期限切れ、文字列パス、文字列ドメイン、int セキュア);
パラメータの説明: Cookie名、Cookie値、有効期限(int)、有効なパス、制限されたドメイン名、https配信のみが有効です
コードは次のとおりです
| コードをコピー
|
注: 現在設定されている Cookie はすぐには有効になりませんが、次のページまで表示されません。これは、Cookie が設定されたページでサーバーからクライアントのブラウザに渡され、ブラウザは保存することしかできないためです。次のページの Cookie は、クライアントのマシンから取得され、サーバーに返されます。
|
使用例:
通常の使用:
setcookie('name','PHP淮北');
有効期限あり:
setcookie('name','PHP淮北',time()+24*60*60);//1日
Cookie はパス指向であり、パスが設定されていない場合、デフォルトでは、図に示すように、別のファイルの下の Cookie が別のフォルダに保存されます。デフォルトでは、mytest フォルダに保存されます。
phphuaibei/201111/201111151945348209.png">
2. Cookie の受信と処理
クライアントとサーバー間の Web 通信プロトコルは http です。 PHP が http 経由でユーザー データを取得するために一般的に使用される 3 つのメソッドは、POST メソッド、GET メソッド、および Cookie です。 PHP のデフォルトの配信方法は Cookie であり、これも最適な方法です。
たとえば、MyCookier という名前の Cookie を設定すると、PHP は WEB サーバーが受信した HTTP ヘッダーからそれを自動的に分析し、$myCookie という名前の通常の変数と同様の変数を形成します。この変数の値が Cookie の値になります。
3. Cookie を削除します
既存の Cookie を削除するには、2 つの方法があります:
- まず、name パラメーターのみを指定して SetCookie を呼び出します。その後、この名前の Cookie が関連コンピューターから削除されます。例: setcookie('name','');
もう 1 つの方法は、Cookie の有効期限を time() または time()-1 に設定することです。そうすれば、ページが閲覧された後に Cookie が削除されます (実際には期限切れになります)。 例: setcookie('name','PHP Huaibei',time()-24*60*60);Cookie が削除されても、その値は現在のページで引き続き有効であることに注意してください。
Cookie使用上の注意:
-
まず、HTML ファイルのコンテンツが出力される前に設定する必要があります (Cookie は HTTP プロトコル ヘッダーの一部であり、ブラウザとサーバーの間で情報を転送するために使用されるため、Cookie 関数は、HTML ファイルのコンテンツを出力する前に呼び出す必要があります) HTML ファイル自体に属するコンテンツが出力されます。
まずPHPページで使用できます
ob_start();//スタート
コード…..
ob_end_flush(); //キャッシュを更新します
ヘッダー プロンプト エラーを防ぐことができます);
ブラウザごとに Cookie の処理方法が異なります -
Cookieの制限はクライアント側にあります。ブラウザで作成できる Cookie の最大数は 30 で、各 Cookie は 4KB を超えることはできません。各 Web サイトで設定できる Cookie の総数は 20 を超えることはできません。 -
現在設定されている Cookie はすぐには有効になりませんが、次のページまで表示されません -
セッションの紹介
セッション メカニズムはサーバー側のメカニズムであり、サーバーはハッシュ テーブル (またはハッシュ テーブル) に似た構造を使用して、各 Web サイト訪問者に一意の識別子、つまりセッション ID を割り当てることができます。もちろん、セッションをデータベースに保存することもできます。これはより安全ですが、URL を使用する方が安全です。 pass PHP のセッションメカニズムは、Cookie を設定し、セッション ID (Session ID) をサーバー側で生成し、ユーザーに関連付けます。これらのセッションとページ間の転送に関連しています。
PHP関連関数
PHP にはセッションに関連する関数が多数ありますが、最もよく使用する関数は次のとおりです。
session_start(): セッションメカニズムを有効にし、セッションを使用する必要があるプログラムファイルの先頭で呼び出します。
session_register(): セッション変数を登録します
session_unregister(): セッション変数を(1つずつ)削除します
session_is_registered(): セッション変数が登録されているかどうかを判断します
session_distroy(): すべてのセッション変数を破棄します (ファイルを含むすべてのセッション変数が破棄されます)
次の点に注意する必要があります:
1. 関数 session_start() は プログラムの先頭で実行する必要があり、それ以外の場合は出力コンテンツを置くことはできません
「警告: セッション Cookie を送信できません - ヘッダーは既にあります」と表示されます
このような警告メッセージを送信しました。
2. 関数 session_register() は、セッションに保存される関連変数を登録するために使用されます:
$val = "セッション値";
session_register("val");
?>
val は登録するセッション変数の名前です。登録時に「$」記号を追加せず、変数名のみを記述します。
3. session_unregister() 関数は上記の関数と全く同じ使い方ですが、上記の関数は登録用です。
セッション変数。指定されたセッション変数を削除します。
4. 関数 session_is_registered() は、セッション変数が登録されているかどうかを判断するために使用されます。
5. session_destroy() 関数は主に、システムがログアウトして終了するときにすべてのセッション変数を破棄するために使用され、パラメーターを持たず、直接呼び出すことができます。
SessionとPHP.iniの関係の設定
1,session.save_handler = ファイル
セッションデータの読み取り/書き込み方法。デフォルトはファイルです。これにより、PHP のセッション管理機能は、指定されたテキスト ファイルを使用してセッション データを保存します
2,session.save_path = “/xammp/temp/”
セッション ファイルを保存するディレクトリを指定します。別のディレクトリに指定することもできますが、指定したディレクトリには httpd デーモンの所有者 (Apache や www など) からの書き込み権限が必要です。そうでない場合、セッション データは復元できません。 session.save_path = "N;/path" (N は整数) のように記述することもできます。これは、すべてのセッション ファイルが同じディレクトリに保存されるわけではなく、異なるディレクトリに分散されていることを意味します。これは、サーバーが大量のセッション ファイルを処理する場合に役立ちます。 (注: ディレクトリは手動で作成する必要があります)
3,session.auto_start = 0
このオプションが有効な場合、セッションはユーザーリクエストごとに初期化されます。推奨されません。session_start() を通じてセッションを明示的に初期化することをお勧めします。
上の写真: 左側は xammp/tmp/ に保存されたセッション ファイルで、内容は PHP シリアル化形式です
右側: 最初の行は echoserialize($_SESSION['name']);//シリアル化
2行目はセッション値を出力します
*******************ファイル名はセッション名で、内容はPHPシリアル化形式です
Cookieとセッションの違いと関係
- セッションはサーバーの場所に保存され、セッション関連の設定はphp.iniを通じて設定できます
- Cookie はクライアントに保存されます (実際には 2 つのタイプに分類できます:
1. 永続的な Cookie、Cookie が設定された時刻は、ファイルの形式でハードディスクに保存されます。
2. セッション Cookie の場合、Cookie のライフサイクルはブラウザを閉じる前に消去されます。通常、Cookie はハードディスクには保存されません。
Cookieとセッションの関係
上の写真からわかるように:
Cookieはhttpヘッダーを介して送信されます:
クッキー <font face="Arial">name=PHP%BB%B4%B1%B1 PHPSESSID=cpt2ah3pi4cu7lo69nfbfllbo7</font>
<font face="Arial" size="2">PHPSESSID はサーバー セッションに関連付けられた重要なパラメータです<code><font face="Arial">name=PHP%BB%B4%B1%B1; PHPSESSID=cpt2ah3pi4cu7lo69nfbfllbo7</font>
<font face="Arial" size="2">セッション ファイルをもう一度見てください: sess_cpt2ah3pi4cu7lo69nfbfllbo7</font>
<font face="Arial" size="2">session_id の生成形式は、sess_ に PHPSESSID 値の文字列を加えたものです<code><font face="Arial" size="2">其中PHPSESSID就是关联服务器session的重要参数</font>
<font face="Arial" size="2">次のように理解できます: <code><font face="Arial" size="2">再看session文件:sess_cpt2ah3pi4cu7lo69nfbfllbo7</font>
<font face="Arial" size="2">session_id的生成格式就是:sess_加上一串PHPSESSID的值</font>
プログラムがクライアントのリクエストに対してセッションを作成する必要がある場合、サーバーはまずクライアントのリクエストにセッション識別子 (セッション ID と呼ばれます) が含まれているかどうかを確認します。含まれている場合は、そのセッションが以前にこのクライアントに対して作成されたことを意味します。 、サーバーはセッション ID に従ってこのセッションを取得します (取得できない場合は、新しいセッションが作成されます)。クライアントのリクエストにセッション ID が含まれていない場合は、クライアントのセッションが作成され、セッションが関連付けられます。このセッション ID が生成される場合、セッション ID の値は、繰り返されず、模倣するパターンが見つけにくい文字列である必要があります。このセッション ID は、保存のためにこの応答でクライアントに返されます。このセッション ID を保存する方法には Cookie を使用できるため、対話プロセス中にブラウザーはルールに従ってこの ID をサーバーに自動的に送信できます。通常、この Cookie の名前は SEEESIONID に似ています<font face="Arial" size="2">我们可以这样理解:</font>
php.iniのセッションとCookieに関する設定
1,session.use_cookie = 1
Cookie メソッドを使用してセッション ID 値を渡すかどうか。デフォルトは 1 で、これは有効を意味します。
2,session.name = PHPSESSID
Cookie が sessioin_id を渡すか、GET メソッドが session_id を渡すかに関係なく、キー値を使用する必要があります。形式は Cookie: sess_name=session_id; および /path.php?sess_name=session_id で、ここで sess_name を指定します。
3,session.use_only_cookies = 0
Cookie メソッドを使用してセッション ID のみが渡されることを示します。 Cookie を渡すには Cookie に加えて GET メソッドもあると述べましたが、GET メソッドは安全ではありません。ユーザー側で Cookie が無効になっている場合、GET メソッドを使用して session_id を渡します。この設定を使用すると、GET メソッドを使用して session_id を渡すことができます。
4. session.cookie_lifetime = 0、session.cookie_path = /、および session.cookie_domain =
Cookie メソッドを使用して session_id を渡す場合、Cookie の有効なドメイン、ディレクトリ、および時刻がここで指定されます。 setcookie() 関数の仮パラメータ $expire、$path、$domain にそれぞれ対応します。このうち、cookie_lifetime=0 はブラウザを閉じるまで Cookie が削除されないことを意味します。これらの値は、session_set_cookie_params() 関数を使用して変更することもできます。
5,セッション名([文字列 $name])
session_name を取得または更新します。 name が渡された場合、デフォルト名 PHPSESSID (session.name で指定) が使用されないことを意味します。それ以外の場合は、現在の session_name が取得されます。注: session_name が設定されている場合、有効にするために session_start() の前に呼び出す必要があります。
6,session_id([文字列 $id])
session_name() と似ていますが、session_id を読み取ったり設定したりするメソッドです。同様に、session_id が設定されている場合、有効にするには session_start() の前に呼び出す必要があります。
7. session_set_cookie_params() と session_get_cookie_params()
session.cookie_lifetime、session.cookie_path、session.cookie_domain の 3 つの php.ini 設定は、session_set_cookie_params() を通じてリセットできます。 Session_get_cookie_params() はこれらの設定の値を取得します。
概要:
- サーバー側のセッションはクライアント側の Cookie よりも安全です
- サーバーがクラスタ化されている場合、セッションは簡単に同期できなくなりますが、Cookie は同期しなくなります
追記: 今日の午後ログアウトするために Cookie を使用すると問題が発生します
ログアウト時に使用:
setcookie('ユーザー名','',time()-3600);
setcookie('name','',time()-3600);
理論的には、Cookie は正常にクリアされるはずです。テスト中に、最初のログインと終了はまったく正常であることがわかりましたが、再度ログインするとログアウトできなくなり、firebug を使用してしまいました。元のページキャッシュが設定されていることを確認し、ページキャッシュの設定にnginxを使用していることを確認しました
。
http://www.bkjia.com/PHPjc/632253.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632253.html技術記事 Cookie とセッションの違いについて詳しく説明した記事を共有して、困っている友人が参考にしてください。 Cookie はユーザーを識別するためによく使用されます。クッキーはサーバーです...