PHPセッション

WBOY
リリース: 2016-06-23 13:08:08
オリジナル
847 人が閲覧しました

session は、Cookie に基づいたセッション技術であり、Cookie よりも高いセキュリティを備えています。

1. セッション原理

図に示すように、セッションはクライアントにセッション ID を送信し、同時にクライアントはリクエスト時にセッション ID を送信します。そしてサーバーはこのセッションを渡します。ID はセッション データ領域で見つかります。クライアントにはセッション ID が 1 つだけあり、重要な情報はサーバーに保存されるため、セッションはより安全になります。

2. セッション操作

session_set.php

<?php//定义session数据文件的存储路径,windows下默认是C:\Windows\tempsession_save_path(getcwd().DIRECTORY_SEPARATOR.'temp');@session_start();echo session_id()."<hr>";//添加$_SESSION['name'] = 'tom';$_SESSION['age'] = 19;$_SESSION['height'] = 75.5;$_SESSION['edu'] = '小学';//修改$_SESSION['age'] = 22;//读取var_dump($_SESSION);//删除unset($_SESSION['edu']);echo "<hr>";var_dump($_SESSION);?>
ログイン後にコピー

セッションがデータを保存するファイルを見てみましょう:

セッションデータ領域の内容は、実行時に保存され、シリアル化された文字列を介して読み取られます。逆シリアル化、セッションはストレージ用に複数のデータ型をサポートしますが、Cookie は文字列のみをサポートします。

3. Seesion クライアント Cookie 属性の設定

セッションの使用は Cookie に基づいており、セッション ID Cookie をクライアントに保存する必要があります。その後、サーバーはこの Cookie の属性を設定して、ブラウザにこの Cookie の生成方法を指示できます:

<?php//定义session数据文件的存储路径,windows下默认是C:\Windows\tempsession_save_path(getcwd().DIRECTORY_SEPARATOR.'temp');session_name("MYPHPSESSID");//设置session_cookie名称, 默认是PHPSESSID/** *session_set_cookie_params($lifetime, $path, $domain, $secure, $httponly)  *$lifetime int 设置客户端cookie的有效期,默认会话结束时 *$path string设置cookie的有效路径 ,默认'/',可选参数 *$domain string 设置有效域,可选参数 *$secure boolean 是否仅在https下发送cookie 默认false,可选参数 *$httponly boolean 是否仅在http中可使用cookie 默认false,可选参数 *///设置cookie有效期60秒session_set_cookie_params(60, '/', '.phpcode.com', false, false) ;@session_start();echo session_id()."<hr>";$_SESSION['name'] = 'tom';?>
ログイン後にコピー

注: session_set_cookie_params は session_start() の前に設定する必要があります。

4. セッションデータ領域のガベージコレクション設定

セッションデータ領域のデータは、ユーザーがサーバーにアクセスするにつれてどんどんガベージデータが生成されるため、ガベージスキャンとガベージクリーニングが必要です。もちろん、どのデータが期限切れになっているかをサーバーが常にスキャンすることは不可能であり、サーバーに多大な損失が発生するため、一定の確率でトリガーする必要があり、ゴミと判断された場合は、片づけられる。

すごいです

次の 2 つのパラメータは、ガベージ スキャンをトリガーする確率を設定します
ini_set('session.gc_probability', '1');
ini_set('session.gc_divisor', '3');
方法設定に時間がかかる 時間が経つとゴミになるのでリサイクル可能
ini_set('session.gc_maxlifetime', '10');

5. Cookieを無効にしてセッションを使用する方法

<?phpsession_save_path(getcwd().DIRECTORY_SEPARATOR.'temp');//设置cookie有效期60秒session_set_cookie_params(60, '/', '.phpcode.com', false, false) ;//设置为服务器被请求3次 有1次可能触发gc ,进行垃圾回收ini_set('session.gc_probability', '1');ini_set('session.gc_divisor', '3');//默认1440秒后就被当为垃圾(最后一次写+1440秒),gc的时候,把该session id对应的 session数据区删除//设置为10秒后为垃圾ini_set('session.gc_maxlifetime', '10');@session_start();echo  session_id();$_SESSION['name'] = 'tom';echo "<hr>";var_dump($_SESSION);?>
ログイン後にコピー

show.html

<?php//定义session数据文件的存储路径,windows下默认是C:\Windows\tempsession_save_path(getcwd().DIRECTORY_SEPARATOR.'temp');//在session_start 前设置以下两项ini_set('session.use_only_cookies', '0');ini_set('session.use_trans_sid', '1');@session_start();echo  session_id();//添加$_SESSION['name'] = 'tom';echo "<hr>";var_dump($_SESSION);echo "<hr>";include 'show.html';?>
ログイン後にコピー

session_get_no_cookie .php

rreee

6. セッションを永続化する方法

一般的に、セッションの永続化は推奨されません。
永続化が必要な場合は、次のように設定します:

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title>Insert title here</title>    </head>    <body>        <a href='session_get_no_cookie.php'>forbidden cookie</a>        <form method="post" action="session_get_no_cookie.php">            <input type="submit" value="submit"/>        </form>    </body></html>
ログイン後にコピー

7. セッションとCookieの違いと関係

連絡先:
セッションはCOOKIEに基づいており、セッションIDはCookieに保存され、Cookieデータはクライアントのブラウザに保存されます、セッションは主にサーバー上にデータが配置されます。

違い:

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!