ログインの有効期限を達成するためのPHPセッションとCookie
1. Cookieデータはクライアントのブラウザに保存され、セッションデータはサーバーに保存されるため、セッションのセキュリティはCookieのセキュリティよりも高くなります。
2.さらに、取得したセッションの情報は、Cookieに保存されているsessionIdを介して取得されます。
3.セッションはサーバーに保存されるため、セッション内のものを継続的に増やすと、サーバーの負担が大きくなります。重要なものをセッションに入れ、重要でないものをクライアントCookieに入れます。
4. Cookieは、セッションCookieと永続Cookieの2つのカテゴリに分類されます。そのライフサイクルはブラウザと同じです。ブラウザを閉じると、cookiが消え、永続性がクライアントにハードに保存されます。ディスク。。
5.ブラウザを閉じるとCookieが消えるため、セッションが消えます。どのような状況でセッションが失われるか、つまりサーバーが閉じられるか、セッションが期限切れになると(デフォルトでは20分)。
httpはステートレスプロトコルです。セッションはCookieまたはURLの書き換えに基づいています。プロセス指向であり、デフォルトでCookieを使用して実装されます。セッションはコンテキスト情報を保存するメカニズムです。ユーザーごとに可変です。値はサーバーに保存されます。ユーザーがサーバーに接続すると、サーバーは一意のSessionIDを生成します。SessionIDは、さまざまなクライアントを区別し、次の識別を容易にするために使用されます。Sessionは、アプリケーションサーバーによって維持されるサーバー側のストレージスペースであり、SessionIDはこれです。 1つのデータがCookieとともにクライアントに保存されます。ユーザーがページを送信すると、SessionIDがサーバーに送信されてセッションデータにアクセスします。
//index.php
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="login.php" method="post">
<p>帐号:<input type="text" name="name"/></p>
<p>密码:<input type="password" name="pw"/></p>
<p><input type="submit" name="login" value="登入"/></p>
</form>
</body>
</html>
//login.php
<?php
session_start();
if(isset($_POST["login"])){
$name=$_POST["name"];
$pw=$_POST["pw"];
if($name=="admin"&&$pw==123456)
{
$_SESSION["name"]=$name;
$_SESSION["pw"]=$pw;
setcookie("Auth",1, time()+120); //2分钟后过期
echo '登入成功,<a href="test.php">查看个人信息</a>';
}
else{
echo '帐号或密码错误!<a href="JavaScript:history.back()">返回登入</a>';
}
}
else{
echo "plaese login";
}
?>
//test.php
<?php
session_start();
error_reporting(0);
if (!isset($_COOKIE["Auth"])){
if (!isset($_SESSION["name"]))
{
echo "会话过期";
}
echo "<a href='index.php'>重新登录</a>";
}
else{
echo "帐户信息:<br/>";
echo "用户名:".$_SESSION["name"]."<br/>";
echo "密码:".$_SESSION["pw"]."<br/>";
echo '<a href="logout.php?action=logout">注销</a>';
}
//logout.php
<?php
if($_GET['action']=="logout"){
header('Refresh:3; url="index.php"');
session_start();
setcookie("cookiename", NULL);
session_unset();
session_destroy();
echo "三秒后返回登入页面";
}
?>