gpt4 book ai didi

php - Symfony 4 一些用户无法登录,csrf token 无效,可能是 php session 问题,没有产生错误

转载 作者:可可西里 更新时间:2023-10-31 23:44:45 25 4
gpt4 key购买 nike

我最近从 Symfony 3.4 升级到了 4.2。服务器更新期间出现了一些问题。起初我将 session 存储在服务器上的一个文件中,但后来我将其更改为存储在数据库中。我遇到的问题是一些用户无法创建 session 。结果是他们无法登录,无法将商品添加到购物车等。CSRF token 也会受到影响,因为它们存储在 session 中。我无法重现问题。

我的 session 配置如下所示

session:
cookie_domain: "%host%"
cookie_httponly: true
#handler_id: session.handler.native_file
#save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
handler_id: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
cookie_secure: true
gc_maxlifetime: 43200 #12 hours
gc_probability: 1
gc_divisor: 50
cookie_lifetime: 0

似乎如果用户清除了他们的浏览器缓存,那么一切都会恢复正常。但是,我不能要求客户这样做。会不会是他们的浏览器中有一些不会消失的陈旧 session 数据?如果用户尝试登录,我可以在数据库中看到成功登录,但他们说他们没有登录。

这只会影响部分客户。我无法将其缩小到任何特定的浏览器或平台,但似乎大多数报告都是针对 Chrome 的。如果他们尝试使用其他浏览器,它就可以正常工作。

如果我自己尝试,它会起作用,而且我可以在我的开发工具中看到 cookie PHPSESSID。

我确实尝试过的一件事是,我认为可能有两个相互冲突的 PHPSESSID cookie(一个在域上有前面的 .,一个没有)是将这段 javascript 添加到每个页面

document.cookie = "PHPSESSID=;Path=/;expires=Thu, 01 Jan 1970 00:00:01 GMT;";

我认为这可以确保删除重复项。然而并没有解决问题。

对于如何着手调试这个问题,我有点难过。任何人都可以提供任何建议吗?

最佳答案

我通过编写一个 php 脚本从用户浏览器中删除两个冲突的 session cookie 解决了这个问题。一个在域名前有一个点,一个没有。然后他们能够正确使用单个 session cookie。问题似乎发生在从 php session 文件更改和将 session 存储在数据库中之间。在 Chrome 中,它已将 php session cookie 存储在浏览器中,而域上没有前面的点。在更改为将 session 存储在数据库中之后,已经拥有该 session cookie 的用户最终会得到重复的,然后发生冲突。同样在 Symfony 4 中,现在有一种正确的方法来迁移 session - https://symfony.com/blog/new-in-symfony-4-1-session-improvements

我希望这对某人有帮助。

关于php - Symfony 4 一些用户无法登录,csrf token 无效,可能是 php session 问题,没有产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52896944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com