php - 用 python php session_start() 模拟 web 交互不起作用
问题描述
我有以下html页面
<?php session_start(); ?>
<html>
<body>
<?php
echo '<!-- cookies -->';
foreach($_COOKIE as $k => $v) {
echo '<!-- ' . $k . '=>' . $v . ' -->';
}
?>
</body>
</html>
当我使用https://daley.ws/file1.php查看页面时,会产生以下页面源
<html>
<body>
<!-- cookies --><!-- PHPSESSID=>22u20jsi288vtk5epser56d2bn7leb6n --></body>
</html>
以下python代码在我的mac上运行:
#!/Library/Frameworks/Python.framework/Versions/3.8/bin/python3
import urllib.request
REQ_HOST = "daley.ws"
DALEY_WS = 'https://daley.ws'
DALEY_WS_FILE1 = '{}/file1.php'.format(DALEY_WS)
DALEY_WS_FILE2 = '{}/file2.php'.format(DALEY_WS)
if __name__ == "__main__":
print(DALEY_WS_FILE1)
req = urllib.request.Request(DALEY_WS_FILE1,\
unverifiable=True, origin_req_host=REQ_HOST,\
method='POST')
with urllib.request.urlopen(req) as response:
data = response.read().decode()
print('data: {}'.format(data))
并产生以下输出:
https://daley.ws/file1.php
data: <html>
<body>
<!-- cookies --></body>
</html>
为什么 PHPSESSID cookie 不存在?以及如何修复 python 代码以使页面产生正确的输出。
解决方案
Python代码没有问题。
当您第一次在浏览器中加载页面时,cookie 不在源代码中。但是当您刷新它时(第二个请求,但带有Cookie:
)它在源代码中。
它不存在于 HTML 中,因为 PHP 会话 cookie 不在 中$_COOKIE
,除非您首先发送带有 HTTP 标头的 cookie Cookie:
。尝试session_id()
在 PHP 或response.getheader("Set-Cookie")
Python 中获取当前会话 cookie。
推荐阅读
- r - 如何对您的数据框进行子集化以仅保留第一个副本?
- sql-server - 执行存储过程 DBI Perl
- php - 如何将帐户注册字段移动到结帐页面的顶部 - WooCommerce
- d3.js - 如何在 D3 中响应 SVG 中的 HTML 画布?
- html - 括号的 Lorem Ipsum 扩展不起作用
- rsyslog - syslog 程序无法写入 /var/log/messages 文件
- authentication - 使用 xamarin.oauth 与 azure Active Directory 进行 Xamarin 表单身份验证
- javascript - 如何在 ember 构建中排除组件
- c++ - 将 shared_ptr 传递给 Lua
- angular - Spring Boot 休息控制器调用