本文主要记录自己学习会话的笔记,仅供参考,之后如果继续学习会继续补充~
cookie
**def:**PHP透明地支持http.cookie。cookie是一种在远程浏览器端存储数据并以此来跟踪和识别用户的机制。
**设置函数:**setcookie()或setrawsookie()
setcookie(
k
e
y
,
key,
key,value,
e
x
p
i
r
e
,
expire,
expire,path,
d
o
m
a
i
n
,
domain,
domain,secure,$httponly);
获取cookie:
C
O
O
K
I
E
[
′
u
s
e
r
n
a
m
e
′
]
∗
∗
删
除
c
o
o
k
i
e
:
∗
∗
s
e
t
c
o
o
k
i
e
(
_COOKIE['username'] **删除cookie:**setcookie(
COOKIE[′username′]∗∗删除cookie:∗∗setcookie(key,$value,time()-3600);
如果浏览器不支持cookie,则可以使用表单传送数据。
session
def: 会话机制(session)在PHP中用于保持用户连续访问web应用时的相关数据,有助于创建高度定制化的程序、增加站点的吸引力。
**设置函数:**session_start();
比如:
<?php
session_start();
$_SESSION['username']='zhangsan';
>
默认session的存放路径为服务器端的tmp目录,如果需要修改,需要在php.ini中设置。
session存放文件名称为sess_32位编码后的随机字符串,比如:sess_4c83638b3b0dbf65583181c2f89168ec,内容如下:
username|s:8:zhangsan;
形式为:变量名|类型:长度:值;
用分号分隔每个变量,有些可以省略,比如长度和类型.
销毁:
//如果需要销毁session,可以单独销毁某个变量:
unset($_SESSION['username']);
//也可以直接销毁整个session文件:
session_destroy();
设置session的声明周期:
如果客户端没有禁用cookie,则cookie在启动session会话的时候,扮演的是存储session ID和session生存期的角色。
session ID就是session文件的扩展名,随机生存的,因此能保证唯一性和随机性,确保session的安全。
如果没有设置session的生存周期,则session id 存储在内存中,关闭浏览器后该ID自动注销,重新请求该页面后,重新注册一个sessionID。
<?php
session_start();
//session生存周期为1天
//session_name()即为php.ini中的session.name = PHPSESSID中的PHPSESSID
//
setcookie(session_name(),session_id(),time()+24*3600,'/');
//也可以用如下函数设置生存周期,但是IE6.0会有点问题,具体不清楚
session_set_cookie_params(24*3600);
>
具体见下面操作的截图:
注意:
如果客户端禁用cookie,则所有的session的生存周期就是浏览器进程了,只要关闭浏览器,再次请求页面又得重新注册session,此时可以通过URL或者隐藏表单来传递sessionID,PHP会自动将sessionID发送到url上,比如:
http://www.test.cn/index.php?PHPSESSID= bba5b2a240a77e5b44cfa01d49cf9669
我们可以通过$_GET来获取该值,从而实现sessionID页面间传递。
具体如下:
<?php
$lifeTime = 24*3600;
$sessionName = session_name();
//取得session ID
$sessionId = $_GET[$sessionName];
//设置session ID
session_id($sessionId);
//设置生存周期
session_set_cookie_params($lifeTime);
session_start();
?>
对于虚拟机主机来说,如果所有用户的session都保存在系统临时文件加里,将给维护造成困难,而且降低了安全性。
我们可以手动设置session文件的保存路径,session_save_path()就提供了这样一个功能。我们可以将session存放目录指向一个不能通过web方式访问的文件夹,当然,该文件夹必须具备可读写属性。
<?php
$path = './session_save_dir/';
$lifeTime = 24*3600;
//一定要在session_start()之前使用
session_save_path($path);
session_set_cookie_params($lifeTime);
session_start();
?>
结论:
无论cookie还是session都能进行会话控制
cookie保存在客户端,安全性不高,当然我们可以通过加密和字符串连接等方式加强安全性。
session保存在服务器中,但同时也依赖于cookie,虽然可以通过其他方式访问,但推荐使用cookie方式,安全性更高。