资讯专栏INFORMATION COLUMN

php中session的相关设置描述

jsdt / 2147人阅读

摘要:一下大多是网上的资料,自己只是整理了下,如果有错误希望能指出,感谢中的相关配置先看下中的相关配置的解释。启用此设定可以防止有关通过传递会话的攻击。值为表示直到关闭浏览器。例如意味着在每个请求中有的概率启动进程。

对于session的了解,之前一直没有仔细研究过,最近遇到了一些问题,需要解决session配置问题,就顺便查看了些资料。一下大多是网上的资料,自己只是整理了下,如果有错误希望能指出,感谢!

PHP中session的相关配置

先看下php.ini中session的相关配置的解释。使用 php -i|grep "php.ini" 找到php.ini的文件目录位置,下面是php.ini配置内容。参考官网:SESSION配置

[Session]
; 定义了来存储和获取与会话关联的数据的处理器的名字。默认为 files
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
; 也可以将session存入到redis,对应的key:PHPREDIS_SESSION:d7sq31qsvtcpsl6khacn068dg3
; session.save_handler = redis
 session.save_handler = files

; session.save_path 定义了传递给存储处理器的参数。如果选择了默认的 files 文件处理器,则此值是创建文件的路径。默认为 /tmp
; redis对应的设置
; session.save_path = "tcp://127.0.0.1:6379?auth=123456"    
session.save_path = "/tmp"

; session.use_cookies 指定是否在客户端用 cookie 来存放会话 ID。默认为 1(启用)。
; 如果为1的话,就可以在浏览器的Cookies中看到本次会话的sessionid
session.use_cookies = 1

可以以chrome为例:

;指定是否在客户端仅仅使用 cookie 来存放会话 ID。。启用此设定可以防止有关通过 URL 传递会话 ID 的攻击。此设定是 PHP 4.3.0 添加的。自PHP 5.3.0开始,默认值改为1(启用)
session.use_only_cookies = 1

; Name of the session (used as cookie name).
; session.name 指定会话名以用做 cookie 的名字。只能由字母数字组成,默认为 PHPSESSID,对应session_name()
session.name = PHPSESSID

; Initialize session on request startup.
; session.auto_start 指定会话模块是否在请求开始时自动启动一个会话。默认为 0(不启动)
session.auto_start = 0

; session.cookie_lifetime 以秒数指定了发送到浏览器的 cookie 的生命周期。值为 0 表示“直到关闭浏览器”。默认为 0
; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 0

; session.gc_probability 与 session.gc_divisor 合起来用来管理 gc(garbage collection 垃圾回收)进程启动的概率。默认为 1
session.gc_probability = 1

; session.gc_divisor 与 session.gc_probability 合起来定义了在每个会话初始化时启动 gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。session.gc_divisor 默认为 100。
session.gc_divisor = 1000

; session.gc_maxlifetime 指定过了多少秒之后数据就会被视为“垃圾”并被清除。 垃圾搜集可能会在 session 启动的时候开始( 取决于session.gc_probability 和 session.gc_divisor)
; After this number of seconds, stored data will be seen as "garbage" and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 3600
; 指定是否启用透明 SID 支持。默认为 0(禁用),比如可以使用url传递如果设置为1
session.use_trans_sid = 0
session的生命周期

参考这两篇文章:
如何设置一个严格30分钟过期的Session
php会话(session)生命周期概念介绍及设置更改和回收
session是由服务端创建的,php程序中如果php.ini中没有配置session.auto_start = 1的话,那么只有使用了session_start才会创建。
session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。当会话自动开始或者通过 session_start() 手动开始的时候, PHP 内部会调用会话管理器的 open 和 read 回调函数。 会话管理器可能是 PHP 默认的, 也可能是扩展提供的(SQLite 或者 Memcached 扩展), 也可能是通过 session_set_save_handler() 设定的用户自定义会话管理器。 通过 read 回调函数返回的现有会话数据(使用特殊的序列化格式存储), PHP 会自动反序列化数据并且填充 $_SESSION 超级全局变量

严格控制30分钟过期的Session

class Session{
        /**
         * 设置session
         * @param [type]  $name   [description]
         * @param [type]  $data   [description]
         * @param integer $expire [description]
         */
        public function set($name,$data,$expire = 300){
            $sessionData = [];
            $sessionData["data"] = $data;
            $sessionData["expire"] = time() + $expire;
            $_SESSION[$name] = $sessionData;
        }

        /**
         * 获取session
         * @param  [type] $name [description]
         * @return [type]       [description]
         */
        public function get($name){
            if(!isset($_SESSION[$name])){
                return false;
            }

            if($_SESSION[$name]["expire"]>time()){
                return $_SESSION[$name]["data"];
            }else{
                self::clear($name);
            }

            return false;
        }

        /**
         * 清除session
         * @param  [type] $name [description]
         * @return [type]       [description]
         */
        private static function clear($name){
            if(isset($_SESSION[$name])){
                unset($_SESSION[$name]);
            }    
        }
}
session的作用

(1)最常用的可能就是存放用户的登录信息了
(2)还有上面鸟哥说的存放优惠券等等

需要注意问题

(1)千万不要在服务端使用setcookie()存放数据,这样很不安全

(2)session.auto_start = 0最好还是使用0,如果是提供api服务的话,会生成很多session,占用资源

扩展知识

session一致性架构设计分布式session存储

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23025.html

相关文章

  • PHP学习记录(session与cookie)

    摘要:为应用程序启用会话状态时,将检查应用程序中每个页面请求是否有浏览器发送的值。如果未提供任何值,则将启动一个新会话,并将该会话的值随响应一起发送到浏览器。 session 什么是session? session在计算机中,尤其在网络应用中,称为会话控制;具体到web中的session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏这个网站所花费的时间。...

    silenceboy 评论0 收藏0
  • 如何设置一个严格30分钟过期Session

    第一种回答 那么, 最常见的一种回答是: 设置Session的过期时间, 也就是session.gc_maxlifetime, 这种回答是不正确的, 原因如下: 首先, 这个PHP是用一定的概率来运行session的gc的, 也就是session.gc_probability和session.gc_divisor(介绍参看 深入理解PHP原理之Session Gc的一个小概率Notice), 这...

    马永翠 评论0 收藏0
  • POSIX函数

    摘要:警告通过函数,可以检索很多敏感数据,例如以及其它函数。当开启了安全模式,函数并不会执行任何的权限检测。返回当前进程所在的当前控制终端的路径名返回值成功时,返回路径名。返回值返回一个关联数组,下标为定义的各种限制。 POSIX: 简介: 该模块包含了定义在 IEEE 1003.1(POSIX.1)标准文档里的函数的接口,通过其它手段无法访问。 警告:通过POSIX函数,可以检索很多敏感...

    diabloneo 评论0 收藏0

发表评论

0条评论

jsdt

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<