您在计算机上操作某个应用程序时,您打开它,做些更改,然后关闭它。这很像一次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。然而,在因特网上问题出现了:由于 HTTP 地址无法保持状态,Web 服务器并不知道您是谁以及您做了什么。
PHP session 解决了这个问题,它通过在服务器上存储用户信息以便随后使用(比如用户名称、购买商品等)。然而,会话信息是临时的,在用户离开网站后将被删除。
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。
下面以简单购物车实例说明session,需要分别创建session.php、echo.php、delete.php文件。
session.php
创建session
<?php //启动session session_start(); // 存储 session 数据 $_SESSION['xuandaima']="《炫代码教程书籍》"; $_SESSION['shiping']="苹果"; echo "已经添加商品到购物车!"; ?>
echo.php
输出session
<?php //启动session session_start(); // 显示 session 数据 echo "购物车里的物品:".@$_SESSION['xuandaima'].' '.@$_SESSION['shiping']; ?>
delete.php
删除session(删除某个session)
<?php //启动session session_start(); // 注销 session 数据 if(isset($_SESSION['shiping'])) { echo "你已经删除了物品:".$_SESSION['shiping']; unset($_SESSION['shiping']); } ?>
登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。
session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session。
Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。
Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端。因Cookie在客户端所以可以编辑伪造,不是十分安全。
存储数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象
Session过多时会消耗服务器资源,大型网站会有专门Session服务器,Cookie存在客户端没问题。
域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。