php session 和cookie 实现登录过期
1、cookie数据存放在客户的浏览器上,session数据放在服务器上,所以session的安全性要高于cookie。
2、再者,我们获取的session里的信息是通过存放在cookie里的sessionId获取的
3、因为session是存放在服务器里的,所以session 里的东西不断增加会增加服务器的负担,我们会把一些重要的东西放在session里,不太重要的放在客户端cookie里
4、cookie分为两大类,一个是会话cookie和持久化cookie,他们的生命周期和浏览器是一致的,浏览器关了的话cooki也就消失了,从而持久化会存储在客户端硬盘中。
5、当浏览器关闭的时候cookie也就消失所以我们的session也就消失了,session在什么情况下丢失,就是在服务器关闭的时候,或者是session过期(20分钟默认)。
http是无状态的协议 session是以cookie或URL重写为基础的, 他是流程化的 ,默认使用cookie来实现, session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,用户在连接服务器时,会由服务器生成一个唯一的SessionID,通过 SessionID来区分不同的客户 并且方便下一次的识别 Session是由应用服务器维持的一个服务器端的存储空间,而SessionID这一数据则是用Cookie保存到客户端,用户提交页面时,会将这SessionID提交到服务器端,来存取Session数据。
//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 "三秒后返回登入页面";
}
?>