【问题标题】:php session is not stored in chromephp会话未存储在chrome中
【发布时间】:2013-05-13 12:04:44
【问题描述】:

我已经有一段时间没有使用 php 了,回到我的一个项目只是为了发现 session 变量没有被存储。真是意外,因为我上次检查时,它工作正常,我没有使用 php(因此没有更改代码或配置)。

情况如下:会话没有跨页面存储(我可以保存它并且它在页面上显示相同,但​​是当我刷新时 - 没有任何变化)。

我在这里查看PHP Session data not being saved 并复制了示例:

<?php
session_start();
if(isset($_SESSION['views']))
    $_SESSION['views'] = $_SESSION['views']+ 1;
else
    $_SESSION['views'] = 1;

echo "views = ". $_SESSION['views'];
echo '<p><a href="page1.php">Refresh</a></p>';

但没有任何变化:我仍然有视图 = 1。

尽管如此,我并没有更改我的配置,但我仍然查看了 phpinfo():

我检查了写入文件夹 /tmp 的权限 - 它们没问题,而且每次刷新后都会出现一个新文件。

然后我检查了其他浏览器中的工作:令我惊讶的是,它在 Firefox 中工作:数字正确增加。

所以情况:在 chrome 中它不起作用,在 firefox 中它起作用。我默认使用 chrome。我还记得当它切换到闪烁时使用 chrome 选项,但据我所知,我把所有东西都改回来了。

知道如何修复 chrome 中的 php 会话吗?

PS:

  • cookie 在 chrome 中启用
  • 会话文件在 /tmp 我试图将它们全部删除,稍后我在 chrome 中刷新页面 - 出现新文件
  • 在标头中我发送 Cookie:PHPSESSID=mystring 但没有会话 ID

【问题讨论】:

    标签: php google-chrome session


    【解决方案1】:

    这是 Chromium 中的一个已知问题。 Issue 114877

    在根文件夹中放置一个网站图标,这应该可以解决您的问题。

    【讨论】:

    • 是的。不幸的是,如果您添加 favicon,您和您的用户必须访问网站以获取 favicon 更新。 chrome 历史无法解析扩展中的新网站图标。
    【解决方案2】:

    我曾经在使用不同浏览器的 php 会话时遇到一些边界情况。

    如果在 echo 语句之前使用 session_write_close(),您能否确认代码示例正常工作?

    您还应该考虑将会话保存到另一个存储中,而不是默认保存在 tmp 文件夹中的文件中。 Memcache、redis、数据库都是可以很好扩展的选项。

    【讨论】:

    • 但是默认应该可以工作,并且仅仅因为这不起作用而更改为其他存储有点尴尬......
    • 我已经根据我使用会话的经验提到了一个注意事项。我认为没有经验丰富的 php 开发人员愿意将其会话保存到默认的 tmp 文件夹中。
    • 请注意,这只是一个建议 - 它不会解决他抱怨的问题。我给出的解决方案是尝试session_write_close()
    【解决方案3】:

    在 Chrome 中打开 cookie 并退出隐身(隐私浏览)。

    编辑:尝试将 session.cache_expire 设置回 180(默认值)

    【讨论】:

    • @SalvadorDali Uhm,查看您的 phpinfo……您的 session_cache_expire 是否应该为 0 ?尝试将其恢复为 180(默认值)。您可以尝试在代码中执行此操作,而无需编辑 php.ini ,方法是放置 session_cache_expire(180); before session_start();。手册没有指定将 session.cache_expire 设置为 0 的默认行为,因此它实际上可能意味着 0 分钟。
    • @SalvadorDali 但只是为了仔细检查:FireFox 和 IE 可以工作吗?在开发人员工具中,您会看到正在加载的页面并获得 200-OK? (并不是说它是从缓存中提供的。)
    【解决方案4】:

    尝试使用前缀 ; 评论 php.ini 中的 session.save_path = "/tmp" 指令。

    所以重启后apachephpinfo() 应该显示no value for session_save_path

    【讨论】:

    • 如何解决这个问题:Any idea how I can fix php sessions in chrome?
    • cokies 由 PHP 服务器发送到浏览器并保存在 session.save_path,但您的浏览器 chrome 可能无法访问该路径
    • save_path 与 PHP 在服务器上存储会话的物理文件的位置有关。没有浏览器可以访问该路径。
    • @PeerBr,cookie(包含 session_id)存储在客户端,会话数据存储在服务器端 session.save_path。最好不要改变这条路。
    【解决方案5】:

    请检查 php.ini 中的会话使用 cookie。如果为零,则将其激活为 1,例如 session.use_cookies = 1

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多