关于为什么使用会话技术:
我们在浏览网站的时候,访问每一个Web页面都是使用HTTP协议来实现的。由于HTTP协议是一个无状态的协议。这就会导致当一个用户请求一个页面以后,再请求该网站的其他页面,HTTP协议并不能告诉服务器这是同一个用户。
因为HTTP协议是无状态的,所以我们无法跟踪用户。所以一定程度上会影响我们的开发,例如:登录模块,如果不能跟踪用户,将会导致访问该网站的每一个都要求我们重新登录。还有就是购物车也是需要使用到用户跟踪。
1.cookie方式
为了对用户进行跟踪,就必须对用户进行标记,cookie的思想就是,当用户访问网站的第一个页面时,通过设置用户的信息标识,web服务器将其以文本文件的形式存放到用户的电脑上面,这些文件就是所谓的cookie,以键值对的方式存储,当用户再访问第二个该网站的页面时,将通过http头信息,将携带cookie文件中的信息一起访问服务器,并重新对刚才的用户信息进行验证,这样避免了每次访问都输入用户信息,可以确定多个页面之间的访问是不是同一用户了。
2.session方式
session与cookie相似,只是原来将信息存在用户端的,现在改为存到服务端,但在用户端产生一个标识id,这个id默认是保存到用户本地的cookie中,所以session又和cookie扯上了关系。这样用户第一次访问时将信息存到web服务器,并随机分配给用户一个固定长度的字符串(session id),以后用户再访问其他页面,就带着这个id去服务端里找对应用户数据信息,于是就可以跟踪用户了,使用cookie的session称为基于cookie的session。
使用会话的基本步骤如下:
1)开始一个会话
调用session_start()函数即可,函数的具体功能可以查阅PHP的文档。需要注意的是,必须在使用会话的脚本开始部分调用这个函数,如果没有,所有保存在该会话中的信息都无法在脚本中使用。除了手动调用session_start()函数外,也可以自动配置PHP自动调用,可以Google之。
2)注册一个会话变量
从PHP4.1以后,会话变量保存在超级全局数组$_SESSION中。要创建一会话变量,只需要在数组中设置一个元素,如$_SESSION['myvar'] = 5;
3) 使用一个会话变量
要使用一个会话变量很简单,使用$_SESSION数组访问保存的会话变量即可,如 echo $_SESSION['mywar']; 会打印出 5。使用会话前必须首先使用session_start()函数启动一个会话。
4)注销变量和销毁会话
注销变量直接使用unset即可,如unset($_SESSION['myvar']),如何要一次销毁所有会话变量,可以使用 unset($_SESSION); 当使用完一个会话后,首先应该注销所有的变量,然后再调用session_destroy() 来清除会话ID。
<?php
//page1.php 启动一个会话并注册一个变量
session_start();
$_SESSION['sess_var'] = "Hello, world!";
echo 'The content of $_SESSION[\'sess_var\'] is ' . $_SESSION['sess_var'] . '<br />';
?>
<a href="page2.php">Next Page</a>
<?php
//page2.php 访问一个会话并注销它
session_start();
$_SESSION['sess_var'] = "Hello, world!";
echo 'The content of $_SESSION[\'sess_var\'] is ' . $_SESSION['sess_var'] . '<br />';
unset($_SESSION['sess_var']);
?>
<a href="page3.php">Next Page</a>
<?php
//page3.php 结束会话
session_start();
echo 'The content of $_SESSION[\'sess_var\'] is ' . $_SESSION['sess_var'] . '<br />';
session_destroy();
?>
本文探讨了HTTP协议的无状态特性及由此带来的用户跟踪难题,详细介绍了cookie和session两种会话技术的工作原理,以及它们在实际应用中的优缺点比较。
1860

被折叠的 条评论
为什么被折叠?



