MODX、curl 和匿名会话

MODX, curl and the anonymous sessions

提问人:user1398498 提问时间:11/17/2023 更新时间:11/17/2023 访问量:17

问:

主要是我的问题是,当我使用 cURL 发出请求时,包括具有随机值的会话 cookie,modx 会话从该 cookie 的值开始。 这让我很困惑。

modx 会话和 cookie 配置:

anonymous_sessions: Yes
default_username: (anonymous)
session_cookie_httponly: Yes
session_cookie_secure: Yes
session_handler_class: [empty] 
session_name: PHPSESSID

请求示例:

curl -i  -X GET "https://www.example.com/test-page" -b "PHPSESSID=adventure-time" -v

请求标头:

> GET /test-page HTTP/2
> Host: www.example.com
> User-Agent: curl/8.1.2
> Accept: */*
> Cookie: PHPSESSID=adventure-time
> 

响应标头:

< HTTP/2 200 
< date: Fri, 17 Nov 2023 09:58:21 GMT
< server: Apache
< expires: 0
< cache-control: no-store, no-cache, must-revalidate
< pragma: no-cache
< set-cookie: PHPSESSID=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; secure; HttpOnly
< vary: Accept-Encoding
< content-length: 1636
< content-type: text/html; charset=UTF-8

Php 响应:

$_COOKIE['PHPSESSID']: adventure-time
session_id(): adventure-time
session_id() == $_COOKIE['PHPSESSID']: access granted 

这不是错误的行为,还是我不明白php会话应该如何工作?有人可以透露一些信息吗,请...

php curl modx革命

评论

0赞 KIKO Software 11/17/2023
你期待什么行为? 允许客户端告诉服务器会话 ID 是什么,而这正是发生的事情。这并不意味着PHP可以接受它。请注意响应中的 。我不知道你的PHP代码是做什么的,但测试会话的方法是看看是否可以检索存储在其中的内容。如果不能,则不再处于同一会话中。PHPSESSIDset-cookie: PHPSESSID=deleted;$_SESSION
0赞 user1398498 11/17/2023
@KIKOSoftware,我希望会检查它是否存在,所以基本上没有根据 $_COOKIE[PHPSESSID] 值检查会话是否有效?它基于它启动新会话,仅此而已。如果我循环 curl 请求,会话将被重新创建。
0赞 KIKO Software 11/17/2023
创建新会话是一个安全的选项。PHP 无法猜测会话 ID 应该是什么,它依赖于客户端告诉它的内容。那里没什么可检查的。如果会话(无论出于何种原因)不存在,那么创建一个会话似乎是明智的。
0赞 user1398498 11/17/2023
@KIKOSoftware,这消除了我的疑虑,谢谢
1赞 CBroe 11/17/2023
如果你想阻止PHP自动创建一个会话,使用通过cookie传递的任何(假)会话ID,那么你需要将session.use_strict_mode设置为true。然后,当传递的会话 ID 与现有会话不匹配时,PHP 会自动自行创建一个新的会话 ID。

答: 暂无答案