• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP中Session ID的实现原理实例分析
    POST TIME:2021-10-18 04:17

    本文实例讲述了PHP中Session ID的实现原理。分享给大家供大家参考,具体如下:

    Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。

    PHPSESSIONID的生产算法原理如下:

    hash_func = md5 / sha1 #可由php.ini配置

    PHPSESSIONID = hash_func(客户端IP + 当前时间(秒)+ 当前时间(微妙)+ PHP自带的随机数生产器)

    从以上hash_func(*)中的数据采样值的内容分析,多个用户在同一台服务器时所生产的PHPSESSIONID重复的概率极低(至少为百万份之一),设想,但台动态Web Server能到2000/rps已经很强悍了。

    另外,黑客如果要猜出某一用户的PHPSESSIONID,则他也必须知道“客户端IP、当前时间(秒、微妙)、随机数”等数据方可模拟。

    php.ini配置如下:

    ; Select a hash function for use in generating session ids.
    ; Possible Values
    ;  0 (MD5 128 bits)
    ;  1 (SHA-1 160 bits)
    ; This option may also be set to the name of any hash function supported by
    ; the hash extension. A list of available hashes is returned by the hash_algos()
    ; function.
    ; http://php.net/session.hash-function
    session.hash_function=0
    
    

    【PHP session工作原理】

    以下以cookie传输PHPSESSID描述。

    1. 客户端请求一个php的服务端地址。

    2. 服务端收到请求,此次php脚本中包含session_start()。

    3. 服务端会生成一个PHPSESSID。(默认session存储方式为session.save_handler=files,文件形式存储。生成的session文件名规则即为sess_PHPSESSID,session文件存在session.save_path中。)

    4. 服务端响应首部Response Headers:Set-Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50; path=/。在客户端生成一个cookie保存此PHPSESSID。

    5. 此时,客户端的cookie里面包含了PHPSESSID,之后客户端的每次请求首部Request Headers:Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50。服务端之后每次接收到客户端的请求就都能根据这个

    PHPSESSID来找到服务端的session文件,通过对这个session文件的读写操作即实现了session的超全局变量属性。

    如果客户端禁用了cookie,由于无法使用cookie传递PHPSESSID,那么客户端每次请求,服务端都会重新建立一个session文件,而无法通过通过PHPSESSID来重用session文件,所以session也就失效了。

    这种情况可以设置session.use_trans_sid来传输PHPSESSID,具体实现方式与cookie的区别就是将PHPSESSID通过HTTP的GET传输。每次请求的地址里面都会补全PHPSESSID参数”url?

    PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50”来实现。

    【PHPcli模式通过session_id()使用session】

    可以通过它来获取当前会话的PHPSESSID,也可以通过它来设置当前的会话PHPSESSID。

    PHPcli模式下可以通过设置这个,达到使用session的目的,非常方便。

    例如:

    ?php
    // session_id('vingbrv8m64asth0nhplu9gmb7');
    session_start();
    $_SESSION[md5(rand(100,999))] = rand(100,999);
    var_dump($_SESSION);

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php缓存技术总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP错误与异常处理方法总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • php中session_id()函数详细介绍,会话id生成过程及session id长度
    • php查看当前Session的ID实例
    • PHP修改session_id示例代码
    • PHP通过session id 实现session共享和登录验证的代码
    • PHP Session_Regenerate_ID函数双释放内存破坏漏洞
    • php生成SessionID和图片校验码的思路和实现代码
    • PHP Session ID的实现原理与实例
    上一篇:解决php extension 加载顺序问题
    下一篇:PHP中非常有用却鲜有人知的函数集锦
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信