我们有一个CentOS 5.4服务器,服务于我们的一些网站。 服务器由Plesk 9.2.3pipe理。 我们的网站是用PHP开发的。
我们在/var/www/vhosts/ourapplication.co.uk/httpdocs中有我们的主域ourapplication.co.uk,而在/ var / www / vhosts / ourapplication / subdomains / api中有我们的子域api.ourapplication.co.uk / httpdocs资料
以下页面位于两个位置:
davidstest1.php
<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta http-equiv="X-UA-Compatible" content="IE=7" /> <title>Code Blue Stats</title> <link rel="stylesheet" type="text/css" href="css/style.css" /> </head> <body> <?php echo "This is Davids Test 1. It will set SESSION['davids']='davids variable set' and then link to davidstest2.php<br /> davidstest2 wil then do a session_start() call, and attempt to display SESSION['davids'] <br />"; $_SESSION['davids']='davids variable set'; ?> <a href="davidstest2.php">davidstest2.php</a> </body> </html>
davidstest2.php
<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta http-equiv="X-UA-Compatible" content="IE=7" /> <title>Code Blue Stats</title> <link rel="stylesheet" type="text/css" href="css/style.css" /> </head> <body> <?php echo "This is Davids Test 2. It will do a session_start() call, and attempt to display SESSION['davids'] <br />"; $r=print_r($_SESSION, true); echo "<pre>Session in <br />"; echo $r; echo "<br /></pre>"; ?> <a href="davidstest2.php">davidstest2.php</a> </body> </html>
在MAIN域中,davidstest2返回
This is Davids Test 2. It will do a session_start() call, and attempt to display SESSION['davids'] Session in Array ( [siteMode] => none [davids] => davids variable set ) davidstest2.php
在api SUBDOMAIN中,davidstest2返回
This is Davids Test 2. It will do a session_start() call, and attempt to display SESSION['davids'] Session in Array ( ) davidstest2.php
显然,Apacheconfiguration或者PHPconfiguration中的东西是错误的,因为会话variables应该被存储在两个域中
Relevant phpinfo() reports: Session Support enabled Registered save handlers files user Registered serializer handlers php php_binary wddx session.auto_start Off Off session.bug_compat_42 Off Off session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_divisor 1000 1000 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.hash_bits_per_character 5 5 session.hash_function 0 0 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path /var/lib/php/session /var/lib/php/session session.serialize_handler php php session.use_cookies On On session.use_only_cookies Off Off session.use_trans_sid 0 0
任何想法从哪里开始寻找?
文件在服务器上的位置并不重要。 为了确保会话cookie对于域及其子域都可用,请使用php函数session_set_cookie_params并适当地设置域参数:
Cookie域,例如“www.php.net”。 要使cookie在所有子域上都可见,那么域名必须以“.php.net”之类的点作为前缀。
注意:
您需要为每个请求调用session_set_cookie_params(),并在调用session_start()之前
所以你的脚本应该包括这个,或者你可以select明确地在你的php.ini文件中设置cookie域。
Cookies不能跨越不同的主机名(实际上这不是真的,但真正的答案会花费我太多的时间来input)。
如果您必须拥有多个主机名,则使用单一login解决scheme。
C。
我会validation会话的cookie域设置是否正确。 运行session_get_cookie_params(void)。 这将返回一个数组,其中cookie将起作用。