我正在使用Wordpress开发一个网站。
我的永久链接结构设置为显示帖子/页面名称。因此,访问名为 store 的页面将如下所示:www.mysite.com/store/?some=arguments
在我的所有WP模板中,我都可以使用print_r($_SESSION);
从jQuery.ajax
调用的文件中执行相同操作只会输出一些SESSION变量。
我使用以下代码查看两个文件的cookie路径是否相同,它们是:
$sessCookie = ini_get('session.cookie_path');
echo 'session.cookie_path: '.$sessCookie;
我的文件中也有此代码以确保会话已启动:
if (!session_id())
session_start();
为什么我无法从WP模板和从jQuery.ajax
调用的php文件输出相同的会话变量?
更新
jQuery.ajax
调用jquery.php
个文件。在此文件的顶部,它具有以下代码:
require_once($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php');
此代码触发functions.php
。在此文件中,我有以下代码:
function session_manager() {
if (!session_id())
session_start();
// Get variables in query string
$_SESSION['action'] = (isset($_GET['action']) ? $_GET['action'] : '');
$user_geo_data = get_geoip_record();
$_SESSION['user_geo_location'] = get_object_vars($user_geo_data);
}
从functions.php
触发jquery.php
时,似乎session_id()
返回false,因此我创建了一个新会话。
有没有办法继续使用同一个会话?
更新2
似乎WP config在初始化时会杀死所有GLOBAL变量。
http://wordpress.org/support/topic/wp-blog-headerphp-killing-sessions
答案 0 :(得分:0)
Wordpress可以使用自己的会话处理程序,并覆盖默认的会话处理程序来执行此操作。所以从本质上讲,你有两个不同的会话,即使它们共享相同的ID。 cookie路径仅仅是客户端cookie的运行方式。您需要检查的是session_save_path()
,并检查WP是否通过数据库而不是默认文件处理程序运行会话。
答案 1 :(得分:0)
启动两个会话的原因是因为第一个会话是基于浏览器的(通过cookie)而第二个会话是Ajax
,实际上是服务器端且无法访问会话cookie中。
会话cookie是存储会话ID的位置,用于标识现有会话。服务器端Ajax
脚本无法访问浏览器的cookie,因此会启动新会话。
如果主脚本使用备用会话“保存处理程序”而不是Ajax
脚本,则可能会更糟,导致两个单独的会话存储在两个不同的位置。