在session_start()

时间:2011-07-01 06:10:04

标签: php

我的页面只是:

<?php
session_start();
?>

服务器响应标头显示:

HTTP/1.1 200 OK
Date: Fri, 01 Jul 2011 03:30:07 GMT
Server: Apache
X-Powered-By: PHP/5.2.11
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=zOk****************; path=/
Content-Type: text/html

我期待start/run/cookies中的文件类似于:

user@mysite[1]

但没有。

为什么不呢?

我的终点是让每个页面都有通常的登录/未登录测试,包括启动页面......

3 个答案:

答案 0 :(得分:4)

会话数据存储在服务器上而不是客户端。 要在客户端上存储会话数据,您必须启用session.use_only_cookies

查看http://php.net/manual/session.security.php

上的PHP手册

答案 1 :(得分:0)

感谢大家的帮助。

我下载了一个名为fiddler的程序,它让我能够看到在我的服务器和客户端之间传回和转发的字符。

我在服务器上创建了一个仅包含

的php文件[A]
session_start();
echo "<a href='/testsessstill.php'>test again</a>";

我创建了一个php文件[B] testsessstill.php,只是回应了“hi”

我从浏览器中拨打了A.

客户端请求标头中的PHPSESSID = xxxx? NO
服务器响应标头中的PHPSESSID = xxxx? YES
客户端计算机cookie文件夹中的Cookie文件? NO
server / tmp文件夹中的文件? NO

我通过A

中的链接呼叫了B.

客户端请求标头中的PHPSESSID = xxxx? YES
服务器响应标头中的PHPSESSID = xxxx? NO
客户端计算机cookie文件夹中的Cookie文件? NO
server / tmp文件夹中的文件? NO

我在我的客户端计算机上搜索了任何文件中是否存在字符串“SESSID”,但没有找到。

因此,如果我错了,我的信念和正确的答案如下:

当调用session_start()时,它会在标头中向客户端返回一个SESSID,SESSID将被保留,并与会话与客户端内存相关的站点相关联,并且不会写入客户端上的文件。 / p>

当客户端请求标头以请求标头中的PHPSESSID值到达时,服务器会读取它,但不会将SESSID保留在任何位置。 SESSID的值仅存在于客户端的内存中。服务器不会将响应头中的SESSID返回给客户端。如果请求在头部中带有SESSID,则服务器将其接受为SESSID。

[显然,下一步是设置与SESSID相关的值,但它至少帮助我探索了上面的内容。它有助于理解我认为的安全性。

我怎么走?那都是准确的评估吗?

答案 2 :(得分:0)

会话由两部分组成:

  • 服务器上的实际会话数据
  • 客户端上具有会话ID的cookie

启动会话时,服务器会在系统目录中创建一个随机文件(可通过session.save_path选项进行配置),在该目录中,它会将您写入的所有数据存储到$_SESSION中。它使用随机会话ID 向客户端发送cookie。此会话ID本身就没有价值,它只是帮助服务器将某个会话与特定客户端关联起来。客户端在后续请求时将此会话ID cookie返回给服务器,服务器在调用session_start()以重新激活已存在的会话时接收该请求。

  • 客户端上没有存储会话数据,只有会话ID cookie。
  • 存储cookie的方式和位置完全取决于使用的浏览器。
  • 您需要在希望使用会话的每个页面上调用session_start()