会话控制是一种面向连接的可靠通信方式,通常根据会话控制记录判断用户登录的行为。例如,当我们在某个网站的e-mail系统上成功登录以后,在这之间的查看邮件、收信、发信等过程,有可能需要访问多个页面来完成。但在同一个系统上,多个页面之间互相切换时,还能保持用户登录的状态,并且访问的都是登录用户自己的信息。这种能够在网站中跟踪一个用户,并且可以处理在同一网站中同一个用户在多个页面共享数据的机制,都需要使用会话控制的思想来完成。
一.cookie
定义
cookie是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或者硬盘上,在客户对该服务的请求中发回它。php透明的支持http cookie。可以利用它在远程浏览器端存储数据并以此来跟踪和识别用户的机制。cookie的中文意思是:小甜饼,是web服务器端给客户端的。但是这个小甜饼并不是服务器白给客户端的,需要客户端使用cookie为服务器记录一些信息。例如,把web服务器比做是一家商场,商场中的每个店面比作是一个页面,而cookie则好比你第一次去商场时,由商场为你提供的一张会员卡或者积分卡。当你在这家商场的任何店面中购物时,只要你提供你所保存的会员卡,就会被看做是本商场的会员而享受折扣的待遇。而且在会员卡的期限内,任何时间来到这家商场都会被看做是商场的会员。
当用户第一次登陆系统,会把这个用户有关的信息,以键值对的形式设置到客户端计算机的cookie中(通过http响应头部信息发送给客户端)。当再次访问同一个服务器中其他php脚本时,就会自动携带cookie中的数据一起访问(通过http请求的头部信息传回给服务器)。在服务器的每个脚本中都可以接受cookie中的数据,并重新对登陆者的身份进行验证,而不需要每访问一个页面就重新输入一次登陆者的信息。
使用cookie将用户的状态信息,存放在客户端的计算机之中。让其他程序能通过存取用户端计算机的cookie,来存取目前的使用者资料。
php api支持
setcookie
$_COOKIE[]
demo:基于cookie的用户登录模块
login.php
<?php
/**
* Created by PhpStorm.
* Date: 16/8/15
* Time: 11:46
*/
function clearCookies()
{
setcookie('username', time() - 3600);
setcookie('isLogin', time() - 3600);
}
if ($_GET['action'] == 'login') {
clearCookies();
if ($_POST['username'] == 'admin' && $_POST['password'] == '123456') {
setcookie('username', $_POST['username'], time() + 60 * 60 * 24 * 7);
setcookie('isLogin', '1', time() + 60 * 60 * 24 * 7);
header('Location:index.php');
} else {
die("用户名或密码错误");
}
} elseif ($_GET['action'] == 'logout') {
clearCookies();
}
?>
<html>
<head><title>用户登录</title></head>
<form action="login.php?action=login" method="post">
用户名:<input type="text" name="username"/> <br>
密码:<input type="password" name="password"/><br>
<input type="submit" value="登录"/>
</form>
</html>
index.php
<?php
/**
* Created by PhpStorm.
* Date: 16/8/15
* Time: 11:56
*/
?>
<html>
<head><title>网站主站页面</title></head>
<body>
<?php
echo '您好' . $_COOKIE['username'];
?>
<a href="login.php?action=logout">退出</a>
<p>这里显示网页的主题内容</p>
</body>
</html>
二.session
定义
session技术与cookie技术相似,都是用来存储使用者的相关资料。但最大不同在于cookie是将数据存放在客户端计算机中,而session则将数据存放在服务器系统之下。相比cookie,session更可靠,因为浏览器是可以禁用cookie的。
session中,在客户端需要保存由服务器为用户创建的一个session标识符,而在服务器端保存session变量的值。session ID客户端的cookie里,如果用户阻止cookie的使用,则可以将sessionid保存在用户浏览器地址栏的URL中。当用户请求web服务器时,就会把session id发送给服务器,再通过session ID提取保存在服务器中的session变量。
当某个用户向web服务器发送请求时,服务器首先会检查这个客户端的请求里是否已经包含了一个session ID,如果包含,说明之前已经为用户创建过session,服务器则按照该session ID把session检索出来使用。如果客户端请求不包括session ID,则为该用户创建一个session,并且生成一个与此session关联的session ID,在本次响应中被传送给客户端保存。
session是将使用者的状态信息存放到服务器之中,让其他程序能够通过服务器中的文件或数据库,来存取使用者资料。
php api支持
大概分几块
配置session
session的声明和使用
注册一个会话变量和读取session
注销变量与销毁session
session的自动回收机制
传递session ID
demo:传递session ID
test1.php
<?php
/**
* Created by PhpStorm.
* Date: 16/8/15
* Time: 14:30
*/
session_start();
$_SESSION['username'] = 'admin';
echo 'session id'.session_id().'<br>';
?>
<a href="test2.php?<?php echo SID ?>">通过URL传递session id</a>
test2.php
<?php
/**
* Created by PhpStorm.
* Date: 16/8/15
* Time: 14:33
*/
session_start();
echo $_SESSION['username'] . '<br>';
echo 'session id' . session_id() . '<br>';
?>
三.cookie和session的区别
session技术与cookie技术相似,都是用来存储使用者的相关资料。但最大不同在于cookie是将数据存放在客户端计算机中,而session则将数据存放在服务器系统之下。相比cookie,session更可靠,因为浏览器是可以禁用cookie的。
思考
有没有感觉和android客户端一样,在我们第一次登录后,就把用户的UserInfo都存到本地来,然后在以后的页面用到的时候从本地取就可以了,不需要再去服务器取了。