欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php中session_id()函数详细介绍,会话id生成过程及session id长度

程序员文章站 2022-05-18 13:01:57
php中session_id()函数原型及说明session_id()函数说明:stringsession_id([string$id])session_id() 可以用来...

php中session_id()函数原型及说明session_id()函数说明:stringsession_id([string$id])session_id() 可以用来获取/设置 当前会话 id。为了能够将会话 id 很方便的附加到 url 之后, 你可以使用常量 sid 获取以字符串格...

php中session_id()函数原型及说明

session_id()函数说明:

string session_id ([ string $id ] )

session_id() 可以用来获取/设置 当前会话 id。

为了能够将会话 id 很方便的附加到 url 之后, 你可以使用常量 sid 获取以字符串格式表达的会话名称和 id。 请参考 会话处理。

session_id()函数参数:

id

如果指定了 id 参数的值, 则使用指定值作为会话 id。 必须在调用 session_start() 函数之前调用 session_id() 函数。 不同的会话管理器对于会话 id 中可以使用的字符有不同的限制。 例如文件会话管理器仅允许会话 id 中使用以下字符:a-z a-z 0-9 , (逗号)和 - (减号)

note: 如果使用 cookie 方式传送会话 id,并且指定了 id 参数, 在调用 session_start() 之后都会向客户端发送新的cookie, 无论当前的会话 id 和新指定的会话 id 是否相同。

session_id()函数返回值:

session_id() 返回当前会话id。 如果当前没有会话,则返回空字符串("")。

php会话id如何生成以及会话id长度

    一个访问者访问你的 web 网站将被分配一个唯一的 id, 就是所谓的会话 id. 这个 id 可以存储在用户端的一个 cookie 中,也可以通过 url 进行传递. session会话用来追踪每个用户的会话,使用服务器生成的sessionid进行标识,用以区分用户。session存放在服务器的内存中,sessionid存放在服务器内存和客户机的cookie里面。这样,当用户发出请求时,服务器将用户cookie里面记录的sessionid和服务器内存中的sessionid进行比对,从而找到这个用户对应的session进行操作。所以,如果客户机禁止cookie的话,session也不能使用。

php会话id是如何产生的?php默认的session id生成算法介绍

    以php5.3.6的源码为例,进入/ext/session目录,生成session id的函数位于session.c文件的345行,c语言函数原型如下:

phpapi char *php_session_create_id(ps_create_sid_args);

  有兴趣的可以具体分析实现原理。

php默认的session id长度

截取一些实际的php 5.4.6服务端生成的session id如下:

sess_00nrqa20hjrlaiac0eu726i4q5  sess_89j9ifuqrbplk0rti2va2k1ha0  sess_g2rv1kd6ijsj6g6c9jq5mqglv5 
sess_04es72a83tqsl0jqd3cvrc4s01  sess_8b7a5lme60g49lvk4u4jiemdn1  sess_g3uk6d3gbashg5eoq0b2k7vsk0 
sess_04u0ns0oobh2g93t009bij2rq0  sess_8dfvkiv8ml44fdqrk1rcmjchs4  sess_g64tddhbo8pbj8bs7bel44rf35 
sess_0592dolr5m0k392fah6c9preg7  sess_8fhgkjuakhatbeg2fa14lo84q1  sess_g6kl828qqsnvdrse7ff52cl2a4 
sess_066g8irr0m22iqotscepub4e13  sess_8gn03i9j1tta7655qfj6nl1l53  sess_g8t45j6qce7mf55nk14cotj5i4 
sess_08nr1fav9jqs2pdi5qlpsmd247  sess_8gvu05313o7p9usksaacaiegu6  sess_gbtjmr57iat86c8ve86ar5nh30

可见具体的session id 为 “sess_”后面的部分,长度为26位,此长度仅限于php 5.4.6.

php session_id()用法代码举例如下:

输出session_id()详细代码:

<?php
  session_start();
  echo session_id();
  // 输出 08nr1fav9jqs2pdi5qlpsmd247
?>

设置 session_id()详细代码:

<?php
  session_id("www.169it.com");
  session_start();
  echo session_id();
  // 输出 www.169it.com
?>