龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

PHP中cookie和session的区别实例分析(3)

时间:2014-08-31 03:19来源:网络整理 作者:网络 点击:
分享到:
调用className类中的6个静态方法.className可以换对象就不用调用静态方法,但是用静态成员不用生成对象,性能更好. 2.6 常用session函数: bool session_start(void); 初始

调用className类中的6个静态方法.className可以换对象就不用调用静态方法,但是用静态成员不用生成对象,性能更好.
 
2.6 常用session函数:
bool   session_start(void); 初始化session
bool   session_destroy(void): 删除服务器端session关联文件。
string session_id() 当前session的id
string session_name() 当前存取的session名称,也就是客户端保存session ID的cookie名称.默认PHPSESSID。
array session_get_cookie_params() 与这个session相关联的session的细节.
string session_cache_limiter() 控制使用session的页面的客户端缓存
ini    session_cache_expire() 控制客户端缓存时间
bool   session_destroy()     删除服务器端保存session信息的文件
void   session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure [, bool httponly]]]] )设置与这个session相关联的session的细节
bool session_set_save_handler ( callback open, callback close, callback read, callback write, callback destroy, callback gc )定义处理session的函数,(不是使用默认的方式)
bool session_regenerate_id([bool delete_old_session]) 分配新的session id

2.7 session安全问题

攻击者通过投入很大的精力尝试获得现有用户的有效会话ID,有了会话id,他们就有可能能够在系统中拥有与此用户相同的能力.
因此,我们主要解决的思路是效验session ID的有效性.

<?php
if(!isset($_SESSION['user_agent'])){
  $_SESSION['user_agent'] = $_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'];
}
/* 如果用户session ID是伪造 */
elseif ($_SESSION['user_agent'] != $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']) {
  session_regenerate_id();
}
?>

2.8 Session通过cookie传递和通过SID传递的不同:

在php5.2.1的session的默认配置的情况下,当生成session的同时,服务器端将在发送header set-cookie同时生成预定义超级全局变量SID(也就是说,写入cookie和抛出SID是等价的.),当$_COOKIE['PHPSESSID']存在以后,将不再写入cookie,也不再生成超级全局变量SID,此时,SID将是空的.
 
2.9 session使用实例

<?php
/**
* 效验session的合法性
*
*/
function sessionVerify() {
  if(!isset($_SESSION['user_agent'])){
    $_SESSION['user_agent'] = MD5($_SERVER['REMOTE_ADDR']
    .$_SERVER['HTTP_USER_AGENT']);
  }
  /* 如果用户session ID是伪造,则重新分配session ID */
  elseif ($_SESSION['user_agent'] != MD5($_SERVER['REMOTE_ADDR']
  . $_SERVER['HTTP_USER_AGENT'])) {
    session_regenerate_id();
  }
}
/**
* 销毁session
* 三步完美实现,不可漏
*
*/
function sessionDestroy() {
  session_destroy();
  setcookie(session_name(),'',time()-3600);
  $_SESSION = array();
}
?>

注明: session 出现头信息已经发出的原因与cookie一样.
在php5中,所有php session 的注册表配置选项都是编程时可配置的,一般情况下,我们是不用修改其配置的.要了解php的session注册表配置选项,请参考手册的Session 会话处理函数处.

相信本文所述对大家更好的理解PHP中cookie与session的用法有一定的借鉴价值。

精彩图集

赞助商链接