在PHP中的会话深度

时间:2013-08-09 17:49:32

标签: php database session cookies

我对PHP会话几乎没有疑问。希望尽快得到答案。

  1. 如果我只使用会话而不创建任何cookie。会话是否自动在客户端浏览器中创建cookie?

  2. 如何知道会话ID?它是由开发人员创建的,还是每个创建的会话都由id引用?

  3. 如果我要破坏会话,在销毁之前我是否要删除我从未在我的网站上编写代码的cookie? (因为我只需要创建一次登录,可能会在一年内像选举一样。所以我不需要在客户端存储用户信息。)

  4. 如果我的代码为$_SESSION['user']='xxx',当'yyy'登录时,会话数据是否存储在服务器中,$_SESSION['user']会被'yyy'取代吗?

  5. 我怎么知道,我的网站可以同时处理多少用户?这与我如何管理会话有什么关系吗?或服务器流量?

  6. 我在某处读到会话也可能被劫持。因此建议在数据库中存储会话而不是在服务器中存储/ tmp。如何在数据库中存储会话?是否有任何特定的过程,或者我们必须像经典方式一样继续,在创建会话时编写要插入的查询,在会话被销毁时删除它?

  7. 提前感谢。

2 个答案:

答案 0 :(得分:4)

  1. PHP默认使用cookie。如果在调用session_start()时不存在会话cookie,则会为您创建一个会话cookie(假设满足各种条件,例如在session_start()调用之前没有执行任何输出)。

  2. session_id()

  3. 销毁会话意味着擦除存储在服务器上的会话中的数据。您必须在客户端手动删除会话cookie(通过使其过期)。
  4. 会话通过其ID与特定用户绑定。两个不同的用户将拥有两个不同的ID,这意味着他们的$ _SESSION对于每个用户都是唯一的。如果为所有用户的会话变量分配相同的值,则所有用户将具有相同的值,但该值的唯一COPY。
  5. 对此没有答案。涉及的变量太多了:服务器内存/ CPU速度,网络带宽,磁盘带宽,代码效率,等等等等等等。
  6. 会话可能被劫持。除非您正在进行多服务器PHP安装或与其他人共享服务器,否则不需要数据库中的会话。会话文件可以按站点唯一,因此使用基于文件的会话不一定是安全问题。
  7. 如果你正在做自己的会话处理程序,那么你负责创建/更新/删除会话数据。

答案 1 :(得分:3)

答案: -

1)。是的,名称为“PHPSESSID”或“在php.ini中为sesssion设置默认名称”。

2)。您可以在session_id()函数的帮助下了解会话ID。

3)。是的,如果你愿意,也可以。我如何推荐销毁会话

if(session_id() == '' || !isset($_SESSION)) {
    session_start();
}
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);

4)。否每个不同的用户在会话文件夹中都有不同的会话存储。

5)。取决于...服务器空间和会话大小。 [仅供参考,会话作为文件存储在您的服务器中,并从那里引用],所以它有争议回答这个问题。

6)。会话可以被劫持,如果你的主机在1个文件夹中提供所有站点会话,你最好更改你的主机,而我推荐的启动会话方式如下: -

if (session_start()) {
$exp = "7200"; // set your expiry time, here 60*60*2 = 7200 i.e, 2 hour
    setcookie('PHPSESSID', session_id(), time()+$exp, '/', null, null, true);
}

上面发生了什么,代码,您实际上是用httpOnly覆盖您的会话名称和值,并确保您的系统中的“TraceEnable”已关闭。这使得你的Cookies偷窃几乎不可能。