当前位置:首页 > PHP教程 > php会话 > 列表

session与cookie会话控制

发布:smiling 来源: PHP粉丝网  添加日期:2013-11-14 19:14:22 浏览: 评论:0 


注意 1: PHP不会自动创建目录结构. 你可以使用在ext/session目录内的脚本来创建目录结构.

注意 2: 如果你选择使用子目录来保存session,请检查下面关于垃圾回收的配置段

文件存储模块默认使用600模式来创建文件,在使用中你可以改变此选项

session.save_path = "N;MODE;/path"

这里的MODE由8进制来表示. 注意这里不会覆盖进程的umask.

session.save_path = "/tmp"

用来设置是否在客户端使用cookie来存放会话ID.

session.use_cookies = 1

用来设置是否只使用安全链接协议(https)来发送cookie

session.cookie_secure =

用来决定是否在客户端只使用cookie来存放会话ID,而放弃使用URL,很好的保护了那些在URL中传送session id的用户免于被攻击。 默认是 0.

session.use_only_cookies = 1

session的默认名称 (作为cookie名称来使用).

session.name = PHPSESSID

用于指定是否在请求开始的时候自动启动session.

session.auto_start = 0

用于指定放送到浏览器端的会话cookie的生命周期(单位:秒),或者如果为0表示cookie的生命周期直到浏览器被关闭为止。

session.cookie_lifetime = 0

cookie有效作用路径.

session.cookie_path = /

cookie有效的作用域名.可以防止别的域非法读取自己的会话cookie,以增强cookie的安全性

session.cookie_domain =

是否将httpOnly标志增加到cookie上, 增加后则cookie无法被浏览器的脚本语言(例如JavaScript)存取.

session.cookie_httponly =

用于序列化数据的处理器. php是标准的PHP序列化器.

session.serialize_handler = php

定义在每次session初始化时启动'垃圾回收'进程的概率.比例由 gc_probability/gc_divisor来得出,例如. 1/100 意味着在每次请求时有1%的机会启动'垃圾回收'进程.

session.gc_probability = 1

session.gc_divisor     = 100

指定了经过多少秒数之后,存储的数据会被认为是'垃圾'并且被垃圾回收进程清理掉. 单位:秒。 1440 == 24分钟
它的判断依据是最后访问数据的时间,对于FAT文件系统则是最后修改数据的时间。

session.gc_maxlifetime = 1440

注意: 如果你使用子目录选项来保存session文件

(查看在上面的session.save_path), 那么垃圾回收就 *不会* 自动发生.你需要通过一个shell脚本,cron或者其他方法来自行处理垃圾回收.例如, 下面的脚本相当于将session.gc_maxlifetime设置为 1440 (1440 秒 = 24 分钟):

cd /path/to/sessions; find -cmin +24 | xargs rm

PHP 4.2 和更早版本有一个未公开的 特性/bug , 此特性允许你在全局初始化一个session变量,即便 register_globals 已经被关闭.如果此特性被使用,PHP 4.3 和更早版本会警告你.你可以关闭此特性并且隔离此警告. 这时候,如果打开bug_compat_42,那此警告只是被显示出来.

session.bug_compat_42 = 1

session.bug_compat_warn = 1

检查HTTP Referer来防止带有id的外部URL.

用来验证HTTP_REFERER中是否包含指定的字符串(通过下面字段设置),如果包含则会话ID被视为有效。默认为空,表示全部视为有效。

session.referer_check =

从此文件读取多少字节.

session.entropy_length = 0

 在这里指定创建session id.

session.entropy_file =

session.entropy_length = 16

session.entropy_file = /dev/urandom

设置为 {nocache,private,public,} 来决定HTTP缓冲的类型, 留空则防止发送 anti-caching 头.

session.cache_limiter = nocache

文档在n分钟之后过期.

session.cache_expire = 180

trans sid 支持默认关闭.使用 trans sid 可能让你的用户承担安全风险.使用此项必须小心.用户也许通过email/irc/其他途径发送包含有效的session ID的URL给其他人.包含有效session ID的URL可能被存放在容易被公共存取的电脑上.用户可能通过在浏览器历史记录或者收藏夹里面的包含相同的session ID的URL来访问你的站点.

session.use_trans_sid = 0

选择hash方法

0: MD5   (128 bits)

1: SHA-1 (160 bits)

session.hash_function = 0

当转换二进制hash数据到可读形式时,每个字符保存时有几位.

4 bits: 0-9, a-f

5 bits: 0-9, a-v

6 bits: 0-9, a-z, A-Z, "-", ","

session.hash_bits_per_character = 4

 URL rewriter会在已经定义的一组HTML标签内查找URL.form/fieldset 是特殊字符; 如果你在这里包含他们, rewriter会增加一个包含信息的隐藏字段否则就是在URL中附加信息.如果你你想遵守XHTML, 删除form的入口.注意 所有合法的入口都需要一个"="符号, 甚至是没有任何值的.

url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="

2.5 session安全问题

攻击者通过投入很大的精力尝试获得现有用户的有效会话ID,有了会话id,他们就有可能能够在系统中拥有与此用户相同的能力.

因此,我们主要解决的思路是效验session ID的有效性.

  1.  
  2. if(!isset($_SESSION['user_agent'])){  
  3.     $_SESSION['user_agent'] = $_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'];  
  4. }  
  5.  
  6. elseif ($_SESSION['user_agent'] != $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'])  
  7. {  
  8.     session_regenerate_id();  

Tags: session cookie 会话

分享到: