一般通过在各个页面之间传递的唯一的 Session ID,并通过 Session ID 提取这个用户在服务器中保存的 Session 变量,来跟踪一个用户。常见的 Session ID 传送方法主要有两种。

第一种方法是基于 Cookie 的方式传递 Session ID,这种方法比较优化,但是不能经常使用,因为用户在客户端可以屏蔽Cookie 。

第二种方法则是通过 URL 参数进行传递,直接将会话 ID 嵌入到 URL 中去。

在 Session 的实现中通常都是采用基于 Cookie的方式,客户端保存的 Session ID 就是一个 Cookie 。当客户端禁用 Cookie时,Session ID就不能再 Cookie 中保存,也就不能再页面之间传递,此时 Session失效。不过在 Linux 平台上可以自动检查 Cookie 状态,如果客户端禁用它,则系统自动把 Session ID 附加到 URL 上传送。而使用 Windows 系统则没有此功能。

1.通过 Cookie 来传递 Session ID

如果客户端没有禁止 Cookie,则在 PHP脚本中通过 session_start()函数进行初始化后,服务器会自动发送 HTTP 标头将 Session ID 保存到客户端计算机的 Cookie 中。类似如下的的设置方式:

虚拟向 cookie 中设置 Session ID 的过程

1
setcookie(session_name(), session_id(), 0, '/')

第一个参数调用 session_name()函数,返回当前 Session 的名称作为 Cookie的标识名称。可以再调用 session_name()函数时提供参数改变当前 Session 的名称。

第二个参数调用 session_id()函数,返回当前 Session ID 作为 Cookie 的值。也可以通过调用 session_id()函数时提供参数设定当前的Session ID。

第三个参数值为 0,通过在php.ini文件中由 session.cookie_lifetime 选项设置的值。默认为0,表示 Session ID 将在客户端的 Cookie 中延续到浏览器关闭。

第四个参数 “ / ”,也是通过PHP配置文件指定的值,在 php.ini 中由 session.cookie_path 选项设置的值。默认为 “ / ”,表示在cookie 中要设置的路径在整个域内都有效。

2. 通过 URL 来传递 Session ID

如果客户端浏览器支持 Cookie,就把 Session ID 作为 Cookie 保存在浏览器中。但如果用户禁止 Cookie 的使用,则浏览器中就不存在作为 Cookie 的 Session ID,因此在客户端请求中不包含 Cookie 信息。如果调用 session_start()函数时,无法从客户端浏览器中取得作为 Cookie 的 Session ID,则又创建了一个新的 Session ID,也就无法跟踪用户状态。 因此,每次用户请求支持 Session 的 PHP脚本,session_start()函数在开启 Session 时都会创建一个新的 Session,这样就失去了跟踪用户状态的功能。

在 PHP 中提供了跟踪 Session 的另一种机制,如果客户端浏览器不支持 Cookie,则 PHP 可以重写客户端请求 URL,把

Session ID 添加到 URL 中。可以手动在每个超链接的 URL 中都添加一个 Session ID,这种方法工作量比较大,一般不建议使用这种方式。其示例的代码如下所示:

1
2
3
4
5
6
<?php
//开启 session
session_start();
// 在 URL 后面附加参数,变量名为session_name()获取的名称,值为session_id()获取
echo '<a href="test.php?'.session_name().'='.session_id().'">演示</a>';
?>

php中如何传递Session ID的更多相关文章

  1. web存储中cookie、session区别

    http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的.为了使得web能够产生一些动态信息,就需要保存”状态”,而cookie和session机制就是为了解决http协议无状态而产生.c ...

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

    php中session_id()函数原型及说明session_id()函数说明:stringsession_id([string$id])session_id() 可以用来获取/设置 当前会话 ID. ...

  3. 设置aspx页面的地址栏中的Session ID的显示与隐藏

    设置aspx页面的地址栏中的Session ID的显示与隐藏修改web.config文件中的sessionState节点下的cookieless的值 1.cookieless的值是false的时候隐藏 ...

  4. 关于缓存中Cookie,Session,Cache的使用

    文章来源:http://canann.iteye.com/blog/1941173 以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application. 其中C ...

  5. 【转】Session ID/session token 及和cookie区别

    Session + Cookie  知识收集! cookie机制采用的是在客户端保持状态的方案.它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持.cookie的作用就是为了解决 ...

  6. C# WebApi的controller中如何存取session

    在MVC以后,Session方式可能已经不太常用,但偶尔还是会用到,比如页面验证码之类的.例如登录页面使用的验证码通过Controller提供一个View来实现,可以使用Session来存储这个值.但 ...

  7. PHP中Cookie与Session的异同以及使用

    Cookie与Session的异同: 一.cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器.IETF RFC 2965 HTTP State Mana ...

  8. Android中Intent传递对象的两种方法(Serializable,Parcelable)

    今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putP ...

  9. Session id实现通过Cookie来传输方法及代码参考

    1. Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.因此从上述的定义中我们可以看到,Session实际上是一个特定的 ...

随机推荐

  1. MySQL之Text Protocol

    1)[01]COM_QUIT 告诉服务器,客户端想要关闭连接 返回:或者关闭一个连接或者一个OK_Packet 有效负载: 1 [01]COM_QUIT 字段: command(1)--0x01 CO ...

  2. sqlmap中文帮助文档

    Options(选项):  -h,--help             显示基本帮助消息并退出  -hh                     显示高级帮助消息并退出  --version      ...

  3. python基本应用--三元应用

    格式为:result=值1 if 条件 else 值2 如 a,b,c = 1,3,5 d =a if a>b else c 那么d的结果是多少? 其实可以使用if来完全表达 if a>b ...

  4. [Python] Codecombat 攻略 Sarven 沙漠 (1-43关)截止至36关

    首页:https://cn.codecombat.com/play语言:Python 第二界面:Sarven沙漠(43关)时间:4-11小时内容:算术运算,计数器,while循环,break(跳出循环 ...

  5. Disconnected from the target VM, address: '127.0.0.1:56577', transport: 'socket'

    Disconnected from the target VM, address: '127.0.0.1:56577', transport: 'socket' Disconnected from t ...

  6. Java集合--Map总结

    转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3311126 第1部分 Map概括 (01) Map ...

  7. 为什么size_t重要?(Why size_t matters)

    之前在<内存拷贝的注意事项>一文中提到过size_t,可能许多人对这个类型不太熟悉没有用过或者根本不敢去用,最近看到一篇文章对这个类型讲的比较详细,便翻译过来让不熟悉的同学可以知道它产生的 ...

  8. Luogu P4270 [USACO18FEB]Cow Gymnasts (打表找规律)

    题意 传送门 题解 首先我们不竖着看奶牛而是横着看.从下往上把奶牛叫做处于第0,1,2...0,1,2...0,1,2...层.那么相当于第000层的不动,第111层的平移一格,第222层的平移222 ...

  9. Appium自动化测试教程-自学网-monkey事件

    操作事件简介 Monkey所执行的随机事件流中包含11大事件,分别是触摸事件.手势事件.二指缩放事件.轨迹事件.屏幕旋转事件.基本导航事件.主要导航事件.系统按键事件.启动Activity事件.键盘事 ...

  10. clip 语法

    clip 语法: clip:auto | <shape> <shape>:rect(<number>|auto <number>|auto <nu ...