PHP会话技术

本文探讨了HTTP协议的无状态特性及由此带来的用户跟踪难题,详细介绍了cookie和session两种会话技术的工作原理,以及它们在实际应用中的优缺点比较。

关于为什么使用会话技术:

我们在浏览网站的时候,访问每一个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();

?>

Cookie和session的区别

(1) cookie是存放于客户端,session是存放于服务器端

(2) 由于session是存放于服务器端,所以安全性比cookie要高

(3) Cookie相比session更能分散服务器的压力,因为数据都分散到了各个客户端。但是这不足以让我们完全使用cookie,因为安全性更重要。

综上所述:将很重要的用户信息存放至session,不怎么重要的信息可以存放到cookie里面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值