1

我有几个关于 PHP 会话的问题。希望尽快得到答案。

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

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

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

  4. 如果我的代码将是$_SESSION['user']='xxx',当“yyy”登录时,$_SESSION['user']由于会话数据存储在服务器中,是否会被“yyy”替换?

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

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

提前致谢。

4

2 回答 2

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

  2. session_id()

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

如果您正在做自己的会话处理程序,那么您负责会话数据的创建/更新/删除。

于 2013-08-09T17:55:49.040 回答
3

答案:-

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

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 的 Cookies 覆盖你的会话名称和值,并确保“TraceEnable”在你的系统中是关闭的。这使得您的 Cookie 窃取几乎是不可能的。

于 2013-08-09T18:04:42.420 回答