我试图更改默认会话和cookie路径为我的应用程序是托管在一个EC2服务器上,有多个网站托管之一。
我尝试了PHP和.htaccess方法
在PHP文件中
$currentCookieParams = session_get_cookie_params();
$path = '/session';
$rootDomain = '.example.com';
if($currentCookieParams["path"] != '/session') {
session_set_cookie_params(
$currentCookieParams["lifetime"],
$path,
$rootDomain,
$currentCookieParams["secure"],
$currentCookieParams["httponly"]
);
}
字符串
in .htaccess
php_flag register_globals off
php_flag magic_quotes_gpc on
php_value session.cookie_path "/var/www/session"
php_value session.cookie_domain ".example.com"
php_value session.save_path "/var/www/session"
型
它在特定的文件夹中创建会话,但当我刷新页面时,会创建新的会话,而不是使用现有的会话。
此外,在第页上刷新所有会话参数,将其重置为默认值。
理想情况下,它应该从现有会话中获取。
我是否需要在Apache或Ubuntu本身中更改或进行任何配置?需要安装哪些模块?
2条答案
按热度按时间smdncfj31#
你似乎完全误解了
session.cookie_path
的含义。这将指定您的会话cookie将被视为有效的 *URL路径 *。
路径
/
意味着cookie将从客户端发送回您的服务器,用于https://example.com/
以下的每个URL。路径为
/foobar/
意味着cookie将只为https://example.com/foobar/
以下的每个URL发送。如果您现在正在访问https://example.com/somethingelse/
,则使用此/foobar/
路径设置的cookie将 * 不会 * 被发送回。您将路径设置为
/var/www/session
-但您访问的URL不是以https://example.com/var/www/session
开头,是吗?只有在该路径下,您的会话cookie现在才有效。此设置与会话数据文件将存储在服务器上的位置无关- * 这 * 是
session.save_path
设置。rseugnpd2#
要更改托管在EC2服务器上的应用程序的会话和Cookie路径,您需要确保设置了正确的权限和配置。以下是您可以遵循的一些步骤:
1.检查文件权限:请确保要存储会话文件的文件夹(在本例中为/var/www/session)具有正确的文件权限。Web服务器(如Apache)应具有该文件夹的读写权限。
2.配置PHP设置:更新php.ini文件以设置会话保存路径和cookie路径。编辑php.ini文件并修改以下行:
;将会话保存路径设置为session.save
;设置会话cookie路径会话。cookie_path =“/session”
保存更改并重新启动Web服务器,以使新设置生效。
3.验证会话配置:进行更改后,创建一个测试PHP文件来检查会话配置。将以下代码添加到PHP文件并通过Web浏览器访问该文件:
“; echo“会话Cookie路径:“. ini_get(”会话.cookie_路径“)。“
“;?>
这将显示当前的会话和Cookie路径值。请确保它们反映了您所做的更改。
4.更新会话cookie域:如果您的应用程序是透过不同的子网域(例如app.example.com、api.example.com)存取,您可能需要相应地更新工作阶段Cookie网域。在PHP配置中,您可以按如下方式进行设置:
会话设置cookie参数(0,“/会话”,“. example.com”);
这将允许跨多个子域访问会话cookie。
5.重新启动Web服务器:对PHP配置或.htaccess文件进行任何更改后,重新启动Web服务器以应用修改。
通过这些步骤,您应该能够为应用程序设置所需的会话和Cookie路径。如果遇到任何问题,请记住检查Web服务器的错误日志中是否有任何错误或警告。
如果您仍然面临问题,请确保您已经安装了所需的PHP扩展,并且在其他Apache或PHP配置文件中没有冲突的配置。
祝你好运!