session は、Cookie に基づいたセッション技術であり、Cookie よりも高いセキュリティを備えています。
図に示すように、セッションはクライアントにセッション ID を送信し、同時にクライアントはリクエスト時にセッション ID を送信します。そしてサーバーはこのセッションを渡します。ID はセッション データ領域で見つかります。クライアントにはセッション ID が 1 つだけあり、重要な情報はサーバーに保存されるため、セッションはより安全になります。
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 は文字列のみをサポートします。
セッションの使用は 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() の前に設定する必要があります。
セッションデータ領域のデータは、ユーザーがサーバーにアクセスするにつれてどんどんガベージデータが生成されるため、ガベージスキャンとガベージクリーニングが必要です。もちろん、どのデータが期限切れになっているかをサーバーが常にスキャンすることは不可能であり、サーバーに多大な損失が発生するため、一定の確率でトリガーする必要があり、ゴミと判断された場合は、片づけられる。
すごいです 次の 2 つのパラメータは、ガベージ スキャンをトリガーする確率を設定します
ini_set('session.gc_probability', '1');
ini_set('session.gc_divisor', '3');
方法設定に時間がかかる 時間が経つとゴミになるのでリサイクル可能
ini_set('session.gc_maxlifetime', '10');
<?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 一般的に、セッションの永続化は推奨されません。
永続化が必要な場合は、次のように設定します:
<!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>
連絡先:
セッションはCOOKIEに基づいており、セッションIDはCookieに保存され、Cookieデータはクライアントのブラウザに保存されます、セッションは主にサーバー上にデータが配置されます。
違い: