作者marinne (乳玛琳)
看板PHP
标题Re: [请益] 关於Session Id的问题!
时间Sun Dec 25 20:39:11 2005
※ 引述《Harifucks (疝气)》之铭言:
: 1. <?php
: 2. session_start();
: 3. if (!session_is_registered('A')) {
: 4. session_register('A');
以一本以PHP 5为书名的书来说,这个范例其实不好。
透过$_SESSION来存取session资料,基本上就不需要(不应该)再使用
session_is_registered()或者session_register()了。
: 5. $_SESSION['A'] = 1;
: 6. }else{
: 7. $_SESSION['A']++;
: 8. }
: 9. echo "Session id = ".session_id()."<p>";
: 10. echo "变数值 = ".$_SESSION['A']."<p>";
: 11. echo "<A HREF=\"./18-6.php\"?SID TARGET=newwin>开新视窗</A>";
: 12. ?>
: 抱歉这是从PHP5 & MySQL4入门学习指南撷取的范例18-6,其中的第11行我
: 有几个问题不太懂:
: 第一为什麽点选"开新视窗"这个超连结所出来的Session ID和
: 原本的Session ID一样,哪一部份完成这件事?
这就是session的功用所在。它让你的程式可以跨request读取到相同的资料。
你在a.php存入某个资料到session,你的b.php或者第二次呼叫a.php的时候,
都读得到这个资料。
session_id()回传的是这个session的唯一识别字串,在同一个session里面,
这个识别字串都会相同。至於是哪一部分完成这件事,以你看到的状况来说,
是cookie。PHP会产生session识别字串然後透过cookie送给你的浏览器。如果
你的浏览器接受这个cookie,这个session识别字串就会透过cookie每次回传
给你的PHP程式,你的程式就因此能够取回这个session里面的资料。
: 第2个问题:"?SID"是什麽,为什麽我把"?SID"拿掉之後网页的结果还是一样!
SID是PHP内建的一个常数,如果cookie里面"没有"session识别字串的话,SID的值
就会是name=ID。name是在cookie或者url里面用来参照到session识别字串的
名称,预设值是PHPSESSID。ID就是你的session识别字串。如果cookie里面"有"
session识别字串,SID的值就是空白。SID是用来在使用者不接受cookie的时候
能够继续使用session功能的变通办法。
你拿掉?SID之後的结果还是一样,那是因为你的浏览器有接受PHP传送的cookie。
在这个状况下,session识别字串不需要透过url来传递也可以正常作用,所以
SID的值是空白字串,拿掉也没有差别。
: 第3个问题:TARGET是什麽有人可以解释一下吗?至少在我1998年买的HTML书籍
: 没有这个东西!
<a>标签的target属性很早很早就有了,你买的书里面没讲到是作者的错。
: 感谢回答!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.153.37