传递会话

  • 2020-09-09 11:09:29
  • 阅读次数:
  • 作者:盈岚科技小编
  • 来源:http://www.lyjtt.cn

做网站中,使用Session跟踪一个用户,是通过在各个页面之间传递唯一的Session ID,并通过Session ID提取这个用户在服务器中保存的Session变量。常见的Session ID传送方法有以下两种。

•基于Cookie的方式传递Session ID,这种方法更优化,但由于不总是可用,因为用户在客户端可以屏蔽Cookie。   

•通过URL参数进行传递,直接将会话ID嵌入到URL中去。在Session的实现中通常都是采用基于Cookie的方式,客户端保存的Session ID就是一个Cookie。当客户禁用Cookie时,Session ID就不能再在Cookie中保存,也就不能在页面之间传递,此时Session失效。不过PHP 5在Linux平台可以自动检查Cookie状态,如果客户端将它禁用,则系统自动把Session ID附加到URL上传送。而使用Windows系统作为Web服务器则无此功能。

  1. 通过Cookie传递Session ID如果客户端没有禁用Cookie,则在PHP脚本中通过session_start()函数进行初始化后,服务器会自动发送HTTP标头将Session ID保存到客户端电脑的Cookie中。类似于下面的设置方式:setCookie(session_name(), session_id(), 0, '/')  //虚拟向Cookie中设置Session ID的过程在第一个参数中调用session_name()函数,返回当前Session的名称作为Cookie的标识名称。Session名称的默认值为PHPSESSID,是在php.ini文件中由session.name选项指定的值。也可以在调用session_name()函数时提供参数改变当前Session的名称。在第二个参数中调用session_id()函数,返回当前Session ID作为Cookie的值。也可以通过调用session_id()函数时提供参数设定当前SessionID。第三个参数的值0,是通过在php.ini文件中由session.cookie_lifetime选项设置的值。默认值为0,表示Session ID将在客户机的Cookie中延续到浏览器关闭。最后一个参数‘/’,也是通过PHP配置文件指定的值,在php.ini中由session.cookie_path选项设置的值。默认值为‘/’,表示在Cookie中要设置的路径在整个域内都有效。如果服务器成功将Session ID保存在客户端的Cookie中,当用户再次请求服务器时,就会把Ses-sion ID发送回来。所以当在脚本中再次使用ses-sion_start()函数时,就会根据Cookie中的SessionID返回已经存在的Session。

  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。如下所示:

    <?phpsession_start();echo '<a href="demo.php?'.session_name().'='.session_id().'">链接演示</a>';?>

    【示例】本例中使用两个脚本程序,演示了Session ID的传送方法。在第一个脚本test1.php中,输出链接时将SID常量附加到URL上,并将一个用户名通过Session传递给目标页面输出。如下所示:<?phpsession_start();                                    //开启Session$_SESSION["username"]="admin";                      //注册一个Session变量,保存用户名echo "Session ID: ".session_id()."<br>";            //在当前页面输出Session ID?><a href="test2.php?<?php echo SID ?>">通过URL传递Session ID</a>   <!--在URL中附加SID-->在脚本test2.php中,输出test1.php脚本在Session变量中保存的一个用户名。又在该页面中输出一次Session ID,通过对比可以判断两个脚本是否使用同一个Session ID。另外,在开启或关闭Cookie时,注意浏览器地址栏中URL的变化。代码如下:<?phpsession_start();                                  //开启Sessionecho $_SESSION["username"]."<br>";                //输出Session变量的值echo "Session ID: ".session_id()."<br>";          //输出Session ID?>如果把客户端的Cookie禁用,单击test1.php页面中的超链接会出现下面的结果,在地址栏中会把Session ID以session_name=session_id的格式添加到URL上。如果客户端的Cookie可以使用,则会把Ses-sion ID保存到客户端的Cookie中,而SID就成为一个空字符串,不会在地址栏中的URL后面显示。启用客户端的Cookie,重复前面的操作。


当前文章标题:传递会话

当前URL:http://www.lyjtt.cn/news/wzzz/3274.html

上一篇:注销和销毁会话

下一篇:设置会话有效期

网站建设、抖音推广、头条推广、微信朋友圈推广、快手推广专线:15368242187(微信同号)