session技术原理:
1
不同的用户,在浏览使用网站过程中,会产生不同的数据;
这些数据,都可以存储在服务器端
——但必须解决一个问题:哪份数据是哪个用户(浏览器的);
解决之道:
在存储某份数据的时候,生成一个不会重复的唯一的cookie数据,并将该cookie发给浏览器。
则该浏览器重新请求其他网页时,就可以将该cookie数据返回来,以识别出原来存储的“自己的”数据。
原理图:
实际上,该用来标识一个用户的“唯一身份”的cookie数据:
其名字为:PHPSESSID //其实就是cookie名。
其值类似:40324;e320424;w$$%@s32455235 ——随机不重复!
END
session使用初步
就两件事:
赋值:
$_SESSION[‘名’] = 值;
取值:
$v1 = $_SESSION[‘名’];
可见:
1,session的使用,几乎跟用数组就一样了!
2,实际上,前提是:先要“开启”session:session_start(); 即该代码是需要先执行session_start()才好使
3,session名跟cookie一样了,自己取名(类似变量名)
4,session值:几乎可以是各种类型的数据;
举例:
7session-base-1.php中:
2
7session-base-2.php中:
7session-base-2.php中:
3
在没有浏览7session-base-1.php之前,先浏览7session-base-2.php,则都显示“没有session”。
浏览7session-base-1.php之后,在浏览7session-base-2.php,则都显示“有session....”
我们来观察一下浏览器中“多出来”的cookie数据:
4
这种数据(名为PHPSESSID的cookie数据),是在session_start()这一行代码执行的时候产生的。
END
session细化
通常:
cookie用于存储“持久数据”——即关闭浏览器后,“以后”再打开还有效的数据,可以设定一个应用中合适的有效时间而已;
session用于存储“会话数据”——即只在浏览器窗口存活周期有效,关闭就无效了。
——但也有一个默认的最大时间(通常是24分钟);
基本设定:
可以设定有效周期:浏览器窗口生存周期——即关闭浏览器就结束了;
用session.cookie_lifetime,其实是设定的session对应的cookie的有效时间
默认不设置,就是0,表示是“浏览器生存周期”
可以设定有效路径:全站有效;
用session.cookie_path,
默认不设置,就是“全站有效”
可以设定有效域名:当前域名有效;
用session.cookie_domain。
默认不设置,就是“当前站点有效”
他们有两种设置法:
方法1:php.ini中:影响全局
方法2:直接带代码中:只影响当前网页
ini_set(“session.cookie_lifetime”, 60*1); //60秒*1分钟
注意这里的写法,跟cookie设置周期的不同:cookie是:time() + 60*1
ini_set(“session.cookie_path”, ‘/d1’); //或者“/”
ini_set(‘session.cookie_domain”, “xxx.com”); //
演示代码:
8session-expire-1.php中:
8session-expire-2.php中:
先浏览8session-expire-1.php,则在一分钟之内浏览8session-expire-2.php,可以看到“有session”
但如果在一分钟之后浏览8session-expire-2.php,可以看到“没有session”。
原因就是:1分钟之后,该session数据对应的PHPSESSID的cookie数据已经超时,无法传回到服务器端。
以上几项的设置,可以使用一个函数一次性搞定:
session_set_cookie_params( 超时时间秒,'路径', '域名')
比如:
session_set_cookie_params( 60*12, ‘/’, ‘php44.com’); //12分钟超时。