鲁鲁槟 2016-07-12 15:29:29 3336次浏览 3条回复 9 2 0

作者:鲁鲁槟 出处:http://www.luluqi.cn/post/default/show-post?id=109
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

一、会话控制

1、出现原因:http 是无状态协议的,每次都是不同的服务器请求,无法维护两个请求事务之间的关系。

2、会话控制:能够在网站中跟踪一个变量,通过对变量的跟踪,就可以使多个请求事物之间建立联系,根据授权和用户身份显示不同的内容、不同页面。

3、会话跟踪技术

(1)使用隐藏域表单,提交给php脚本

<input type="hidden" name="name" value="设置隐藏值">

(2)url 重写:将唯一会话的id添加到url结尾来进行标识,使用超链接或者header()函数

http://www.luluyii.com/post/default/show-post?id=9 

(3)cookie:将唯一的会话 id 存放在客户端

(4)session:将唯一的会话id存放在服务器端

二、cookie

1、基本介绍

(1)cookie 是在 http 协议下,服务器或脚本在客户端保存维护信息的一种方式。

(2)cookie 是 web 服务器保存在客户端的一个很小的文本文件,保存客户端的信息,提高网页的处理效率,降低服务器负担

(3)cookie保存在客户端,通常在浏览器的 cookie 临时文件夹中,可以手动的删除,如果 cookie 太多超过系统的允许范围,系统将自动删除。

2、cookie 的操作

(1)创建 cookie:setcookie("key","value",time()+秒)

① setcookie 为头信息设置,在此之前不能有任何输出

setcookie(name,value,expire,path,domain,secure)

Name:调用名为 cookiename 的 cookie;
value: name 对应的值 
exprice:设置 cookie 的过期时间和日期,用一个标准的 Unix 时间标记,可以用 time()函数取得,以秒为单位 
path:服务器端的有效路径,设置为“/”表示这个域中所有数组都可以被访问读取 
Domain:设定 cookie 有效域名 
secure:指明 cookie 只能通过安全的 https 传送, 设为 true 时只能通过安全的 https,默认为 false, 即设置是否仅在 https 安全连接时才发送 cookie 到客户端:0或 1 

(2)获取 cookie 信息:$_COOKIE['key']

(3)删除 cookie

//方式1:设置值为空 setcookie('username',""); 
//方式2:设置过期时间 setcookie('username',"lulubin",time()-1); 

3、cookie 的实际应用:设置并获取上次访问时间

setcookie("lastVisit",date("Y-m-d H:i:s"),time()+24*3600*30); 
echo "上次访问时间是:".$_COOKIE['lastVisit']; 

三、session

1、基本介绍

session 从用户访问页面开始,到断开与网站的连接为止,形成一个会话的生命周期。在会话期间,分配客户唯一的一个 sessionID(下面的l7e7rl2809tscmgcgi86qegra0),用来标识当前用户,与其他用户进行区分。

2、session 的操作

(1)、初始化 session:session_start( )

session 默认是关闭的,可通过 php,ini 配置文件 session.auto_start = 0

(2)、保存 session 数据:$_SESSION['name'] = 'lulubin'

(3)、session 会话时,session 会分别保存在客户端和服务器端得两个文件。

① 对于客户端:使用临时的 cookie 保存(cookie的名称为PHPSESSID)或者通过 url 字符串的形式传递;

获取 cookie 的名称 
echo session_name(); //输出 PHPSESSID
获取 cookie 的值 
echo $_COOKIE['PHPSESSID']; //输出l7e7rl2809tscmgcgi86qegra0 
session_start(); //注意必须开始 session ,才可以获取用 session_id() 获取到 cookie 的值 
echo session_id(); //输出l7e7rl2809tscmgcgi86qegra0

注意:可通过 session_name('你想要设计的名称')来 sessionName,即设置 cookie的 名称,但必须在 session_strat() 之前

session_name('mySession');
session_start();
$_SESSION['name']="lulubin";

注意:可通过 session_id('你想要设计的名称') 来设置 sessionID,即设置 cookie的 value,但必须在session_start()之前。

session_id('luluyii');
session_start();
$_SESSION['name']='lulubin';

此时你会发现 cookie 的值为 luluyii

② 对于服务器端也以文本的形式保存在指定的 session 目录中。

打开上述目录,发现新增了一个文件,文件名为 sess_l7e7rl2809tscmgcgi86qegra0

注意:如果上面重新设置了 sessionID ,则文件名你设置的 session_id,如上面的 luluyii

(4)打开 sess_l7e7rl2809tscmgcgi86qegra0 文件

注意:session文件的默认存放时间是 1440 秒,即 sess_l7e7rl2809tscmgcgi86qegra0 文件存放 1440 秒后被删除

//获取 session 的值
session_start();
echo $_SESSION['name']; //输出 lulubin

小技巧:sessionID(比如上面的l7e7rl2809tscmgcgi86qegra0) 可以作为会话信息保存到数据库中,进行 session 持久化。

这样可以跟踪用户的登陆次数,在线与否,在线时间。

(5)删除 session

unset( ):用于删除单个session变量

首先,我们先新增两个 session:S_SESSION['password'] = '123456';

然后,打开 sess_l7e7rl2809tscmgcgi86qegra0 文件,你会发现该文件多了两个 数据

然后删除 password 数据:unset($_SESSION['password']),打开文件

② session_unset()`:删除所有的 session 变量

使用 session_unset() 或者 $_SESSION=array(),打开文件,所有数据都被删除了

session_destroy(),执行这个函数,你会发现 sess_l7e7rl2809tscmgcgi86qegra0 文件被删除了

3、cookie 和 session 的区别

(1)相同点:都可以在解决 http 无状态的问题,使同一个客户端在访问网站的多次请求中,可以保存、设置信息,并且在整个web应用中共享。

(2)不同点:cookie 的信息保存在客户端,session 的信息保存在服务器端。

(3)联系:当使用基于 cookie 的 session 时,sessionID 一般保存在 cookie 中。

4、php.ini 中配置 session

session.auto_start=0;//在请求启动时初始化,无需每次手动sessin_start(),不过该选项有一些限制,不能将对象放入会话,因为类的定义必须在会话之前加载在会话中重建对象
session.cache_expire=180; //设置缓存中的会话过期时间在n分钟后
session.cookie_lifetime=0; //设置按秒记的cookie的保存时间,0表示知道浏览器被重启
session.cookie_path=/; //cookie的有效路径
session.cookie_domain=; //cookie的有效域
session.name=PHPSSESID; //又在cookie里的session_name()
session.save_hander=files; //用于保存/取回数据的控制方式
session.save_path=/tmp; //在save_handler设为文件是传给控制器的参数,这是数据文件的保存路径
session.user_cookie=1; //是否使用cookies
session.gc_maxlifetime=40; //指定过了多少秒之后数据就会被视为“垃圾”,并被清楚
session.gc_probability=1//
session.gc_divisor=100;//这两个合起来就是启动gc进程管理概率的,在session初使化时(session_start())
session.gc_probability/session.gc_divisor:1/100,在session_start100次,有一次的概率删除垃圾文件
觉得很赞
您需要登录后才可以回复。登录 | 立即注册