2012-07-25 51 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