一般通过在各个页面之间传递的唯一的 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. linux centos安装nginx1.7.4

    原文转自 jerryhe326:https://www.cnblogs.com/jerrypro/p/7062101.html一.安装准备 首先由于nginx的一些模块依赖一些lib库,所以在安装ng ...

  2. KVM虚拟机高级设置——09 设置KVM虚拟机开机自动启动

    在kvm图形化管理工具里面可以设置,让kvm虚拟机随着宿主虚拟机一起启动. 必须在关机状态下做 . 设置好以后会像Windows一样创建一个快捷方式 [root@CentOS2 ~]# cd /etc ...

  3. Paper Reading:ION

    Inside-Outside Net (ION) 论文:Inside-Outside Net: Detecting Objects in Context with Skip Pooling and R ...

  4. Java&Selenium调用JS实现高亮被操作页面元素高亮

    Java&Selenium调用JS实现高亮被操作页面元素高亮 /* * the method of invoking js to do something * * @author daviey ...

  5. django考点

    django考点 1 列举Http请求中常见的请求方式2 谈谈你对HTTP协议的认识.1.1 长连接3 简述MVC模式和MVT模式4 简述Django请求生命周期5 简述什么是FBV和CBV6 谈一谈 ...

  6. python_并发编程——进程池

    1.进程池 from multiprocessing import Pool def func(n): for i in range(10): print(n+1) if __name__ == '_ ...

  7. FastDFS-基本介绍

    1. 什么是FastDFS FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用Fas ...

  8. Spring boot dubbo+zookeeper 搭建------基于gradle项目的消费端与服务端分离实战

    1. Dubbo简介 Dubbo是Alibaba开源的分布式框架,是RPC模式的一种成熟的框架,优点是可以与Spring无缝集成,应用到我们的后台程序中.具体介绍可以查看Dubbo官网. 2. Why ...

  9. Codeforces Round #585 (Div. 2) A. Yellow Cards(数学)

    链接: https://codeforces.com/contest/1215/problem/A 题意: The final match of the Berland Football Cup ha ...

  10. 签名/加密_Java_hutool( 01 代码实现 )

    本文档不讲解签名/加密相关的理论知识, 仅列出通过Java实现的方式. 待处理: Hutool含有很多工具的封装, 有时间需要好好研究一下(https://blog.csdn.net/moshowga ...