session在PHP大型web应用中的使用对于访问量大的站点,用默认的session存贮方式并不适合,目前最优的方法是用数据库存取session.这时,函数bool session_set_save_handler( callbackopen, callbackclose, callbackread, callbackwrite, callbackdestroy, callbackgc )就是提供给我们解决这个问题的方案.
该函数使用的6个函数如下:
1. bool open() 用来打开会话存储机制,
2. bool close() 关闭会话存储操作.
3. mixde read() 从存储中装在session数据时使用这个函数4. bool write() 将给定session ID的所有数据写到存储中5. bool destroy() 破坏与指定的会话ID相关联的数据6. bool gc() 对存储系统中的数据进行垃圾收集例子见php手册session_set_save_handler() 函数.
如果用类来处理,用session_set_save_handler(
array(''className'',''open''),
array(''className'',''close''),
array(''className'',''read''),
array(''className'',''write''),
array(''className'',''destroy''),
array(''className'',''gc''),
)
调用className类中的6个静态方法.className可以换对象就不用调用静态方法,但是用静态成员不用生成对象,性能更好.
2.6 常用session函数:
bool session_start(void); 初始化session
bool session_destroy(void): 删除服务器端session关联文件。stringsession_id() 当前session的id
stringsession_name() 当前存取的session名称,也就是客户端保存session ID的cookie名称.默认PHPSESSID。arraysession_get_cookie_params() 与这个session相关联的session的细节.
stringsession_cache_limiter() 控制使用session的页面的客户端缓存ini session_cache_expire() 控制客户端缓存时间bool session_destroy() 删除服务器端保存session信息的文件void session_set_cookie_params( int lifetime [, stringpath [, stringdomain [, bool secure [, bool httponly]]]] )设置与这个session相关联的session的细节bool session_set_save_handler( callbackopen, callbackclose, callbackread, callbackwrite, callbackdestroy, callbackgc )定义处理session的函数,(不是使用默认的方式)
bool session_regenerate_id([bool delete_old_session]) 分配新的session id
2.7 session安全问题攻击者通过投入很大的精力尝试获得现有用户的有效会话ID,有了会话id,他们就有可能能够在系统中拥有与此用户相同的能力.
因此,我们主要解决的思路是效验session ID的有效性.
<?php
if(!isset(
php session和cookie使用说明_网学
浏览:
SESSION[''user_agent''])){
php session和cookie使用说明_网学
浏览:
SESSION[''user_agent''] =
php session和cookie使用说明_网学
浏览:
SERVER[''REMOTE_ADDR''].
php session和cookie使用说明_网学
浏览:
SERVER[''HTTP_USER_AGENT''];
}
/* 如果用户session ID是伪造*/elseif(
php session和cookie使用说明_网学
浏览:
SESSION[''user_agent''] !=
php session和cookie使用说明_网学
浏览:
SERVER[''REMOTE_ADDR''] .
php session和cookie使用说明_网学
浏览:
SERVER[''HTTP_USER_AGENT'']) {
session_regenerate_id();
}
?>
2.8 Session通过cookie传递和通过SID传递的不同:
在php5.2.1的session的默认配置的情况下,当生成session的同时,服务器端将在发送header set-cookie同时生成预定义超级全局变量SID(也就是说,写入cookie和抛出SID是等价的.),当
php session和cookie使用说明_网学
浏览:
COOKIE[''PHPSESSID'']存在以后,将不再写入cookie,也不再生成超级全局变量SID,此时,SID将是空的.
2.9 session使用实例<?php
/**
* 效验session的合法性*
*/functionsessionVerify() {
if(!isset(
php session和cookie使用说明_网学
浏览:
SESSION[''user_agent''])){
php session和cookie使用说明_网学
浏览:
SESSION[''user_agent''] = MD5(
php session和cookie使用说明_网学
浏览:
SERVER[''REMOTE_ADDR'']
.
php session和cookie使用说明_网学
浏览:
SERVER[''HTTP_USER_AGENT'']);
}
/* 如果用户session ID是伪造,则重新分配session ID */elseif(
php session和cookie使用说明_网学
浏览:
SESSION[''user_agent''] != MD5(
php session和cookie使用说明_网学
浏览:
SERVER[''REMOTE_ADDR'']
.
php session和cookie使用说明_网学
浏览:
SERVER[''HTTP_USER_AGENT''])) {
session_regenerate_id();
}
}
/**