Heim >Backend-Entwicklung >PHP-Tutorial >session通过URL传递的问题

session通过URL传递的问题

WBOY
WBOYOriginal
2016-07-06 13:51:121394Durchsuche

今天学习了session通过URL传递的知识,所以想试验一下下,遂写了两个页面,内容如下:

【index.php】

<code><?php session_start();    
    $_SESSION["username"] = "admin";       
    echo "Session ID: ".session_id()."<br>";               
?>
<a href="2.php?<?php%20echo%20SID%20?>">来不及了,快上车!</a>  
</code>

【2.php】

<code><?php session_start();  
        echo SID;              
</code></code>

打开index.php后如图所示:
session通过URL传递的问题

点击链接后,跳转页面如图所示:

session通过URL传递的问题

我的疑问是:按道理说两个页面的session ID应该相同啊,可为什么不一样呢?我是小白,还请大神帮我解疑答惑。。。

回复内容:

今天学习了session通过URL传递的知识,所以想试验一下下,遂写了两个页面,内容如下:

【index.php】

<code><?php session_start();    
    $_SESSION["username"] = "admin";       
    echo "Session ID: ".session_id()."<br>";               
?>
<a href="2.php?<?php%20echo%20SID%20?>">来不及了,快上车!</a>  
</code>

【2.php】

<code><?php session_start();  
        echo SID;              
</code></code>

打开index.php后如图所示:
session通过URL传递的问题

点击链接后,跳转页面如图所示:

session通过URL传递的问题

我的疑问是:按道理说两个页面的session ID应该相同啊,可为什么不一样呢?我是小白,还请大神帮我解疑答惑。。。

为什么要在URL带上session?
1.这样不安全,假设你是管理员,如果我在局域网里面抓个包,然后把你的session_id带上,那我就是管理员了;
2.现在一般还是用cookie来传递session_id,只要是HttpOnly的cookie就不怕XSS攻击,而且服务器不要用Apache2.2,有一个400 bad request漏洞是可以泄露HttpOnly cookie的
3.如果浏览器禁用了cookie,就不让登录,用JavaScript就可以实现。

SID 是包含着会话名以及会话 ID 的常量,格式为 "name=ID",和 session_id() 返回的是同一个 ID,但只在客户端不存在会话 cookie 的情况下才会有值,否则 SID 的值是空字符串

  1. 如果在不禁用客户端 cookie 的情况下从 index.php 跳转到 1.php 输出 SID 应该是空字符串才对;

  2. 如果禁用了 cookie,无法从客户端拿到 cookie 中的 Session ID,那么就会产生新的会话,每次跳转到 1.php都会输出不同的 SID;

  3. php.ini 从 PHP 4.3.0 开始添加了 use_only_cookies 的设定,指定是否在客户端仅仅使用 cookie 来存放会话 ID。。启用此设定可以防止有关通过 URL 传递会话 ID 的攻击。自 PHP 5.3.0 开始,默认值改为1(启用)

    传送会话ID
    预定义常量

题主基础不扎实啊,首先SID变量没有被赋值,其次,get参数连key=都没有带上,最后,谁告诉你普通变量可以跨页面传递啊?除非是session或者application超全局变量。

我很想知道你在哪儿学的session通过URL传递的知识,看了原文可能能给你个解答。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn