从URL禁用PHPSESSID

时间:2012-07-25 03:04:11

标签: apache .htaccess symfony apache2

  

可能重复:
  My web host is adding ?PHPSESSID=fgh2h45… to the end of the URL
  How I can remove PHPSESSID in Symfony2

我使用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出现在我网站的所有网址中:

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

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

2 个答案:

答案 0 :(得分:4)

不是重写URL以删除PHPSESSID,而是将php配置为使用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

php中的OR - 在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参数,查询字符串的其余部分将被传递。

答案 1 :(得分:0)

在执行从查询字符串中删除app.php的重定向之前,您正在将URI 重写为 PHPSESSID。您希望之前执行此操作,以便%{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>