cookie和session都是会话变量,主要作用都是在整个会话过程中,实现数据的跨页面访问。
会话变量的用途:
验证用户的身份(是否已经登录)
实现数据的跨页面访问(购物车功能等)
会话变量和普通变量的区别:
会话变量可以跨页面访问(超全局变量)
cookie会话变量只能保存基本数据类型(int float string bool)的变量值,session还可以保存数组(array)类型的值。
一、 cookie会话变量
1. 创建cookie
setcookie(name, value, 有效截止时间, 起作用的目录);
name:表示cookie的名称
value:表示cookie的值
有效截止时间:表示该cookie的失效时间,10位时间戳格式。默认值为0,表示有效期为直到该浏览器页面关闭。
起作用的目录:默认值为设置cookie的当前目录,’/’ 表示服务器根目录下的所有目录都起作用。
如:
setcookie(‘isLogin’,1,time()+60*60,’/’);
setcookie(‘username’,’jack’,time()+60*60,’/’);
访问cookie
可直接访问预定义超全局变量 COOKIE如:echo _COOKIE[‘username’];销毁cookie
注意:unset() 无法销毁cookie;
setcookie(name,”,time()-60,’/’);
一般通过将cooki变量的值设为null或空字符串或0,并将cookie的有效截止时间设为已过期,来销毁cookie
如:
setcookie(‘isLogin’, 0, time()-60, ‘/’);
setcookie(‘username’, null, time()-60, ‘/’);cookie的保存位置
cookie数据是保存在客户端的浏览器中,安全性较差。
但可以通过将cookie的名称和值进行加密来增强安全性。
二、session会话变量
1. 创建session
session_start(); 必须先使用函数session_start(),启动session(除非php.ini的配置中session.auto_start=1,session自动启动)
$$_SESSION[‘名称’]=值;
如:
session_start();
$_SESSION[‘isLogin’] = 1;
$_SESSION[‘username’] = ‘rose’;
$_SESSION[‘data’] = array(‘id’=>3, ‘loginTime’=>date(‘Y-m-d H:i:s’));
访问session
session_start(); 必须先使用函数session_start(),启动session(除非php.ini的配置中session.auto_start=1,session自动启动)
echo $_SESSION[‘username’];销毁session
session_start(); 必须先使用函数session_start(),启动session(除非php.ini的配置中session.auto_start=1,session自动启动)
unset( SESSION[‘名称′])如:sessionstart();unset( _SESSION[‘username’]);
注意:虽然unset()可以销毁数组,但无法使用unset()销毁服务器上的当前会话session文件里的所有数据,如使用unset( SESSION),实际上只是销毁了当前脚本中的 _SESSION数组,而并没有销毁session文件,session数据依然存在于服务器上。故使用unset()销毁session的时候,只能销毁某个具体的session键值对。
session_start();
session_destroy(); 该方法可以销毁当前会话的session文件,即把当前会话的所有session数据都销毁了。
注意:session_destroy()是直接销毁(删除)整个session文件,但由于调用该方法前,需要先调用session_start()启动session,此时在当前脚本中,如果使用预定义超全局变量
SESSION,
_SESSION数组中的数据并没有销毁。
session的保存位置
session数据文件是保存在服务器上的,安全性较好,一般是保存在服务器上的临时目录。
如:session.save_path=”E:\xampp\tmp”PHP中操作session的相关函数
bool session_start ( void )
启动session(创建一个新的session或继续使用一个已存在的session文件),该函数会利用sessionid(sessionid通过cookie获取或通过get请求或post请求得到)来创建一个与sessionid关联的session文件或直接使用当前会话已存在的session文件,然后将session文件中的数据反序列化,并填充至超全局数组$_SESSION中。
string session_name ([ string $name ] )
获取或者设置当前的session名称,准确地说,应该是和当前session相关联的cookie的名称。该cookie中存放的是当前会话的sessionid。
如:PHPSESSID
注意:session_name()函数应该在session_start()之前调用。
int session_status ( void )
返回当前的session的状态
string session_id ([ string $id ] )
获取或者设置当前的sessionid
bool session_destroy ( void )
销毁(删除)当前会话的session文件
void session_unset ( void )
清空当前会话的session文件中的内容(但不会删除session文件),同时,清空$_SESSION全局数组。
void session_write_close ( void )
写入session数据,并关闭当前的session。
string session_save_path ([ string $path ] )
获取或者设置当前session的保存位置
php.ini中关于session的配置
session.save_handler=files 表示session的保存方式为文件方式,默认值
session.save_path=”E:\xampp\tmp” 表示session的保存位置
session.use_cookies=1 表示session会话是否要使用cookie(sessionid通过cookie获取),默认值为是
session.use_only_cookies=0 表示是否强制仅仅使用cookie来存储和维护sessionid,默认值为否
session.name=PHPSESSID 表示存储sessionid的cookie名称,默认值
session.auto_start=0 表示是否自动启动session,默认值为否
session.cookie_lifetime=0 表示和session相关联的cookie的生命周期,默认值为0,即直到浏览器关闭(会话结束)
session.cookie_path=/ 表示和session相关联的cookie的起作用的目录,默认是服务器根目录下的所有目录都起作用。
session.cookie_domain= 表示和session相关联的cookie起作用的域名
session.gc_probability=1 表示session垃圾文件回收机制的概率,概率值的分子。默认值为1
session.gc_divisor=1000 表示session垃圾文件回收机制的概率,概率值的分母。默认值为1000。和上面配合使用,概率为0.1%
session.gc_maxlifetime=1440 表示session的有效时长,单位秒,默认值为24分钟,超过该时长的session数据被视为垃圾文件。
session.use_trans_sid=0 表示是否通过url自动传递sessionid的值,默认值为否禁用cookie后,如何使用session会话?
session会话一般需要cookie的支持,因为当前会话的sessionid默认是通过客户端浏览器的cookie来存储和维护的,如果客户端禁用了cookie,我们就需要使用其他方式来管理sessionid,为此需要修改php.ini的相关配置,并通过URL传参的形式,将sessionid传递给服务器端,就可找到对应的session文件,从而实现session会话。