一、Session 是什么?
1、用户从登陆到退出这个会话期间在服务器端工作的民工!
二、Cookie是什么?
1、Cookie就是服务端通过response响应给客户端,然后客户端才生成cookie文件、文件包含用户的基本信息保存在用户的硬盘上,所以只有硬盘没有坏就存在,会话期间客户端民工!
三、Session相关配置 php.ini
1、 session.use_cookies:默认的值是“1”,代表SessionID使用Cookie来传递,反之就是使用Query_String来传 递;
2、session.name:这个就是SessionID储存的变量名称,可能是Cookie,也可能是Query_String来 传递,默认值是“PHPSESSID”;
3、session.cookie_lifetime:这个代表SessionID在客户端 Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以Session不能永久使用!
4、 session.gc_maxlifetime:这个是Session数据在服务器端储存的时间,
如果超过这个时间,那么Session数据就自动删除!
四、Session和cookie的关系
Session机制产生的会话标示也是通过cookie发送到客户端浏览器,不同的是,原来保存在客户端的cookie信息现在保存在服务器上,服务器把SessionID作为索引,查询用户信息。
SessionID是通过服务器发送的,在http响应中发送 Set-Cookie:SessionID=****;给客户端,客户端浏览器会正确的解析Set-cookie指令,保存这个SessionID,然后每次客户端发出请求时,会将此SessionID一起发送出去,形如Cookie:SessionID=****。
客户端的Cookie在浏览器进程内,肯定会保存在内存中,但当你设定Cookie的有效期非浏览器进程,比如一个月时,浏览器就会将Cookie保存进硬盘,当然浏览器没关的话,内存中也会保存。以后再访问网站时,会提取硬盘中保存的Cookie值,随请求头一起发送。这样可以实现自动登录。浏览器不同,实现方式上也有差别,大体原理是这样。
五、关于SessionID
1、客服端首次访问时,服务器端创建Session对象,生成SessionID。 以文件的形式保存在服务器端。
2、SessionID会被发送到客户端,保存在浏览器内存中。
4、禁用Cookie,SessionID不能被保存在浏览器内存中。
(1)、多次请求同一页面,SessionID变化。
2012-02-09 13:09:54,741 - INFO Sessionid:ln13eo55kf3if5mts2ppff55
2012-02-09 13:09:55,459 - INFO Sessionid:hxyt5d55lcrqjb45xrwlwe45
2012-02-09 13:09:56,192 - INFO Sessionid:yv52cn45d223ot45y4d4qx45
(2)、启用Cookie后,SessionID不再变化。
2012-02-09 13:10:15,754-INFO- requestfile - Sessionid:t25myzaqikyi0f455nj44l45
2012-02-09 13:10:17,330 - INFO - requestfile - Sessionid:t25myzaqikyi0f455nj44l45
六、将SessionID存入数据库的好处
1、控制一个帐号只能一个人登录
2、统计在线人数
3、踢出某个在线用户
4、多站点共享session(网络通行证)
5、实现Application变量(多用户共享的全局变量)
七、销毁SESSION
SESSION发出去的COOKIE一般属于即时COOKIE,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期,比如 退出登录,而不是关闭浏览器,那么就需要在代码里销毁SESSION,方法有很多,
1. setcookie(session_name(), session_id(), time() - 8000000, ..);//退出登录前执行
2.usset($_SESSION);//这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据。
3. session_destroy();//这个作用更彻底,删除$_SESSION 删除session文件,和session_id
八、设置session永久时间,实际达不到
1、session_start(); // 启动Session
$_SESSION['count']; // 注册Session变量Count
isset($PHPSESSID)?session_id($PHPSESSID):$PHPSESSID = session_id();
// 如果设置了$PHPSESSID,就将SessionID赋值为$PHPSESSID,否则生成SessionID
$_SESSION['count']++; // 变量count加1
setcookie('PHPSESSID', $PHPSESSID, time()+3156000); // 储存SessionID到Cookie中
echo $count; // 显示Session变量count的值
2、session.cookie_lifetime=999999 session.gc_maxlifetime=99999999
九、如果浏览器禁用了cookie
1 <?php
2 session_start();
3 $_SESSION['url'] = 'http://www.phpddt.com';
4 echo '这个页面取到的session值:'.$_SESSION['url'];
5 ?>
6 <a href="session_a.php?<?php print session_name() ?>=<?php print session_id() ?>">另一个页面</a>
7 <?php
8 session_start();
9 $_SESSION['url'] = 'http://www.phpddt.com';
10 echo '这个页面取到的session值:'.$_SESSION['url'];
11 ?>
php.ini 中 SESSION 的配置
session.use_only_cookies = 1; // 开启仅使用cookies存放会话id
session.use_trans_sid = 1; // 允许SessionID通过URL明文传输