从 URL 禁用 PHPSESSID

Nll*_*Nll 0 apache .htaccess apache2 symfony

可能的重复:
我的网络主机正在添加 ?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>
Run Code Online (Sandbox Code Playgroud)

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

www.mysite.com/app.php/.....
Run Code Online (Sandbox Code Playgroud)

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

pon*_*cha 5

不是重写 URL 来 remove PHPSESSID,而是将php 配置为使用 cookie 进行会话:

php.ini

session.use_cookies=1
session.use_only_cookies=1
session.use_trans_sid=1
Run Code Online (Sandbox Code Playgroud)

或在.htaccess

php_flag session.use_cookies 1
php_flag session.use_only_cookies 1
php_flag session.use_trans_sid 1
Run Code Online (Sandbox Code Playgroud)

或 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);
?>
Run Code Online (Sandbox Code Playgroud)

并且,最后但并非最不重要的,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>
Run Code Online (Sandbox Code Playgroud)

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