我想阅读HTTP_SESSION
创建的环境变量mod_session
的内容,并根据存储在其中的用户重写一些网址。但似乎我无法访问它,即使我可以在CGI脚本中看到内容。
我有一个登录表单:
cat /var/www/login/login.html
<head>
<meta charset="utf-8">
</head>
<body>
<form method="POST" action="">
Username: <input type="text" name="httpd_username" value="" />
Password: <input type="password" name="httpd_password" value="" />
<input type="submit" name="login" value="Login" />
</form>
</body>
</html>
我创建了一个testuser:
htpasswd -c /etc/apache2/passwords testuser
和相应的apache配置:
<VirtualHost *:80>
ServerName simon.test
DocumentRoot /var/www/
RewriteEngine On
LogLevel debug session:trace8 session_cookie:trace8 headers:trace8 rewrite:trace8
Session On
SessionCookieName session path=/;domain=simon.test;httponly;
SessionEnv On
<Location /login/>
Require all granted
</Location>
<LocationMatch ^/(sp)/(.+)$>
ErrorDocument 401 "/login/login.html"
AuthType form
AuthName "authenticationform"
AuthFormProvider file
AuthUserFile /etc/apache2/passwords
AuthName "test"
AddHandler cgi-script .sh
Options +ExecCGI
SessionEnv On
RewriteRule .* - [E=test:thisworks]
RewriteRule .* - [E=THE_SAVED_SESSION:%{ENV=HTTP_SESSION}]
Require valid-user
</LocationMatch>
</VirtualHost>
/var/www/sp/i.sh
中的
#!/bin/bash
echo "Content-type: text/plain"
echo ""
env
exit 0
当我转到http://simon.test/sp/i.sh
时,会显示登录表单,登录工作正常,但THE_SAVED_SESSION
环境变量从未显示过。即使在apache重写调试日志中它也是空的,但CGI脚本的输出正确显示其内容。
有人知道为什么,以及我如何访问该变量的内容?
答案 0 :(得分:0)
RewriteRule .* - [E=THE_SAVED_SESSION:%{LA-U:ENV:HTTP_SESSION}]
做了这个伎俩。