是什么让php会话保持活力?

时间:2014-04-07 05:25:47

标签: php session

每次访问具有session_start();的页面时,会话是否仅保持活动状态,或者其他页面是否也保持活动状态?

示例( 30分钟超时):

1

  

用户使用session_start()访问页面;
  25分钟后,他们访问另一个session_start();
  页面会话保持活跃

2

  

用户使用session_start()访问页面;
  25分钟后,他们访问非session_start();页面
  会话活着

2 也是如此吗?

8 个答案:

答案 0 :(得分:17)

每当您访问具有session_start()的网页时,浏览器中始终会设置会话Cookie。如果网站使用PHP,则cookie名称将PHPSESSID(尽管名称可以更改)。此会话cookie包含会话ID,可帮助浏览器维护与服务器的会话。

您可以通过浏览任何包含您会话的网站手动检查,然后删除您的浏览器Cookie,您的会话将会丢失。

在你的情况下,1& 2是正确的。

2是正确的,因为用户已经访问过具有session_start()的页面,并且您的会话ID将在接下来的30分钟内设置,即使您访问没有会话的页面,它也会出现

注意:但是您将访问的页面如果包含session_destroy(),您的会话将被销毁。

答案 1 :(得分:12)

调用session_start()只会让您的代码访问会话。

使会话保持活动状态的是您的浏览器将会话ID(存储在cookie中)发送到服务器,无论您是否使用它。

答案:他们都是真的。

答案 2 :(得分:5)

以下是文档中的相关部分

  

当访问者访问您的站点时,PHP将自动检查(如果session.auto_start设置为1)或您的请求(显式通过session_start())是否已随请求发送特定会话ID。如果是这种情况,则会重新创建先前保存的环境

http://www.php.net/manual/en/intro.session.php

  

session_start()根据通过GET或POST请求传递的会话标识符创建会话或恢复当前会话,或通过cookie传递。

http://www.php.net/manual/en/function.session-start.php

这意味着如果您不打电话给session_start,会话将不会恢复,并且不会延长到期时间。

答案 3 :(得分:2)

session_start()是php访问会话以及将会话cookie发送到客户端浏览器的内部机制。

  1. 案例1为真:因为用户使用session_start()访问了一个页面,然后是另一个类似的页面。
  2. 案例2仅在两次访问之间会话超时超过25分钟时才会生效。
  3. 在案例2中,服务器不会发送任何会话cookie,它是一个包含请求头中的cookie的浏览器。

答案 4 :(得分:2)

在本例中,30分钟的PHP会话寿命是一个"技巧问题"因子。默认且几乎通用的会话寿命为1440秒或24分钟。因此对于大多数人来说,会话​​数据可能在25分钟之前消失。

本文介绍了PHP会话如何工作的一些细节。 http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_11909-PHP-Sessions-Simpler-Than-You-May-Think.html

答案 5 :(得分:1)

它不需要对网页做任何事情,会话通过会话ID与您的浏览器进行交互。

PHP生成的会话ID是唯一的,随机的,几乎不可能猜到,非常好 攻击者很难访问或更改会话数据。此外,因为存储了会话数据 在服务器上,不必随每个浏览器请求一起发送。

要在脚本中启动PHP会话,只需调用session_ start()函数。如果这是一个新会话,则此函数为会话生成唯一的SID,并将其作为名为PHPSESSID的cookie(默认情况下)发送到浏览器。  但是,如果浏览器发送了PHPSESSID 由于会话已存在,因此会话cookie到服务器,session_start()使用此现有会话: 在session_start();

答案 6 :(得分:0)

除非您在两个页面上使用不同的会话名称,否则第一个语句为真。

第二个陈述是错误的。

答案 7 :(得分:-1)

如果您想要在所有网页上进行会话,则应在所有网页上调用session_start()

因此,1CORRECT2CORRECT