2012-07-25 26 views
0

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

我develloped我的网站的Symfony 2,所以我试图从网址中删除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。

+0

@ j0k是的它可能是相同的主题,但它不是同一个问题... – Nll 2012-07-25 14:56:59

回答

0

在重定向从查询字符串中删除PHPSESSID之前,您正在重写URI app.php。你想这样做,以便%{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> 
+0

会有副作用..如果OP只想从URI删除PHPSESSID参数,这种方法将擦除整个查询 - 字符串... – poncha 2012-07-25 03:20:27

+0

@Jon Lin我尝试了你的新代码并且直到现在都能正常工作,我不知道app.dev可能会再次出现,所以我会等待,因为在它没有工作之前我做了相同的代码,但现在它工作了! – Nll 2012-07-25 14:51:15

4

而是重写URL删除PHPSESSID的,配置PHP使用Cookie会话:

php.ini

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

OR in .htaccess

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

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参数被删除,其余的查询字符串被传递。

+0

您的解决方案是正确的,但我使用OVH所以我没有php.ini和.htaccess当我喜欢你的第二个解决方案我有错误500 ... – Nll 2012-07-25 14:48:17

+0

@Nll尝试第三个选项;) – poncha 2012-07-25 15:01:34

+0

'session.use_trans_sid'需要设置为'0'(而不是'1')来禁用URL中的会话ID! – TheStoryCoder 2015-07-29 14:51:01