【问题标题】:Does calling session_start multiple times create duplicate cookies?多次调用 session_start 是否会创建重复的 cookie?
【发布时间】:2015-01-28 14:11:58
【问题描述】:

根据this bug report的说法,多次调用 session_start 和 session_write_close 会创建重复的 cookie,如果在一个大循环中多次调用,可能会损害浏览器的性能。

但是当我用下面的代码测试这个错误时,Firebug 只在“Cookies”选项卡下显示了每个 cookie 的一个副本。

<?php

session_name('uniqueName1');
session_start();
$_SESSION['Foo1'] = 'Bar1';
session_write_close();

session_name('uniqueName2');
session_start();
$_SESSION['Foo2'] = 'Bar2';
session_write_close();

session_name('uniqueName1');
session_start();
$sessionValue1 = $_SESSION['Foo1'];
session_write_close();

session_name('uniqueName2');
session_start();
$sessionValue2 = $_SESSION['Foo2'];
session_write_close();

?>

<!doctype html>
<html>
<head>
    <meta charset='utf-8'>
</head>
<body>
    <p>Test</p>
    <p><?php echo $sessionValue1; echo $sessionValue2; ?></p>
</body>
</html>

我是否以错误的方式查找多个 cookie,或者此错误已修复?

【问题讨论】:

  • php.net/manual/en/function.session-start.php 4.3.3 从 PHP 4.3.3 开始,在会话之前启动之后调用 session_start() 将导致 E_NOTICE 级别的错误。此外,第二个会话开始将被简单地忽略。什么都不会发生

标签: php firebug session-cookies


【解决方案1】:

编辑:

这个错误被标记为Not a bug,所以这个问题也不是由特定的系统/修改触发的。版本或者它永远不存在,顺便说一下这个错误是从晚期2006 ;)


不,如果您一个接一个地多次调用session_start,则不会。您可以通过查看 php 源代码来获取此信息

https://github.com/php/php-src/blob/master/ext/session/session.c

switch (PS(session_status)) {
    case php_session_active:
        php_error(E_NOTICE, "A session had already been started - ignoring session_start()");
        return;
        break;

如果一个会话已经开始,它将没有任何效果

【讨论】:

  • 我相信你引用的代码是指一个接一个地调用 session_start ,中间没有调用 session_write_close 。
  • 我相信 PHP 开发人员在行为被认为正确时会说“不是错误”,而不是在行为不存在时。
猜你喜欢
  • 2013-04-01
  • 2020-11-15
  • 2019-06-01
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
相关资源
最近更新 更多