0

可能重复:
我的网络主机添加 ?PHPSESSID=fgh2h45... 到 URL 的末尾
如何在 Symfony2 中删除 PHPSESSID

我用 Symfony 2 开发了我的网站,所以我尝试从 URL 中删除 PHPSESSID,然后我将这段代码放入 /web/.htaccess 中:

    SetEnv SHORT_OPEN_TAGS 0
SetEnv REGISTER_GLOBALS 0
SetEnv MAGIC_QUOTES 0
SetEnv SESSION_AUTOSTART 0
SetEnv ZEND_OPTIMIZER 1
SetEnv PHP_VER 5_4
DirectoryIndex app.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
#remove PHPSESSID 
RewriteCond %{QUERY_STRING} PHPSESSID=.*$ 
RewriteRule .* %{REQUEST_URI}? [R=301,L]
</IfModule>

然后我注释上面的代码禁用了 PHPSESSID,但它会产生另一个问题,我的 app.php 出现在我网站的所有 URL 中:

www.mysite.com/app.php/.....

所以我不知道我能做什么,我想我遇到了新问题,因为我使用了多个 RewriteRule。

4

2 回答 2

5

不要重写要删除的 URL,而是将PHPSESSIDphp 配置为使用 cookie 进行会话:

php.ini

session.use_cookies=1
session.use_only_cookies=1
session.use_trans_sid=1

或在.htaccess

php_flag session.use_cookies 1
php_flag session.use_only_cookies 1
php_flag session.use_trans_sid 1

或 in php- 在所有页面中包含的某个文件中,之前session_start()

<?php
ini_set("session.use_cookies", 1);
ini_set("session.use_only_cookies", 1);
ini_set("session.use_trans_sid", 1);
?>

而且,最后但并非最不重要的一点是,mod_rewrite无论如何,让我们这样做:

<IfModule mod_rewrite.c>
RewriteEngine On

# first, remove PHPSESSID and redirect
RewriteCond %{QUERY_STRING} ^(.*)PHPSESSID=[^&]*(.*)$ 
RewriteRule .* %{REQUEST_URI}?%1%2 [R=301,L]

# then, silently rewrite everything to app.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>

这样,只有PHPSESSID=smth参数被删除,其余的查询字符串被传递。

于 2012-07-25T03:14:33.973 回答
0

在执行从查询字符串中删除 的重定向之前, 正在重写 URI 。您想在此之前这样做,以免被重写。app.phpPHPSESSID%{REQUEST_URI}

尝试用以下内容替换所有内容DirectoryIndex app.php

<IfModule mod_rewrite.c>
RewriteEngine On

# remove PHPSESSID first
RewriteCond %{QUERY_STRING} PHPSESSID=.*$ 
RewriteRule .* %{REQUEST_URI}? [R=301,L]

# rewrite to app.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]

</IfModule>
于 2012-07-25T03:14:21.357 回答