PHP会话在重定向后丢失
我在wordpress.org上有一个wordpress网站。以及部署在同一位置(共享同一主机)的独立PHP会话在重定向后丢失,php,wordpress,session,redirect,Php,Wordpress,Session,Redirect,我在wordpress.org上有一个wordpress网站。以及部署在同一位置(共享同一主机)的独立PHP应用程序 独立应用程序有自己的登录页面和主页。当用户登录时,我设置了一个会话标志,指示用户已登录。但是,当我重定向到用户主页(登录后)时,$\u SESSION中的所有值都将丢失 Cookie路径设置为“/”和会话。save_path设置为“/var/lib/php5” 我已经核对了中给出的答案,并验证了所有要点 此外,我也遵循了这里提到的步骤 但这些都不起作用 有人能提出可能的问题和解决
PHP
应用程序
独立应用程序有自己的登录页面和主页。当用户登录时,我设置了一个会话标志,指示用户已登录。但是,当我重定向到用户主页(登录后)时,$\u SESSION
中的所有值都将丢失
Cookie路径设置为“/”和会话。save_path
设置为“/var/lib/php5”
我已经核对了中给出的答案,并验证了所有要点
此外,我也遵循了这里提到的步骤
但这些都不起作用
有人能提出可能的问题和解决方案吗?谢谢
PHP版本:5.5.9-1ubuntu4.19您真的不应该注释掉或修改wp\u unregister\u globals。查看如何在Wordpress中实现会话而不与wp_unregister_globals发生冲突的示例 我用这个,它的效果很好:
add_action('init', 'myStartSession', 1);
function myStartSession() {
if(!session_id()) {
session_start();
}
}
<>我也会考虑将会话数据存储在数据库中而不是文件中,特别是在共享服务器环境中。该服务器上的任何其他人都可能访问您的站点会话数据并接管用户会话
在我最近的插件中,我在Wordpress数据库中创建了一个新表来存储会话数据,然后使用set_session_save_处理程序来更改行为。因此,我的开始会话脚本如下所示:
add_action('init', 'myStartSession', 1);
function myStartSession() {
if(!session_id()) {
session_set_save_handler('open_session', 'close_session', 'read_session', 'write_session', 'destroy_session', 'clean_session');
session_start();
}
}
add_action( 'session_gc', 'session_gc');
if ( ! wp_next_scheduled( 'session_gc' ) )
{
wp_schedule_event( time(), 'hourly', 'session_gc' );
}
function open_session()
{
return true;
}
function close_session()
{
return true;
}
function read_session($sessionid)
{
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$query = $wpdb->prepare(
"SELECT data FROM $session_table_name
WHERE id = %s",
$sessionid);
$result = $wpdb -> get_var($query);
if ($result)
{
return $result;
} else
{
return '';
}
}
function write_session($sessionid,$data)
{
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$rowsaffected = $wpdb->replace(
$session_table_name,
array(
'id' => $sessionid,
'data' => $data
),
array(
'%s',
'%s'
));
return true;
}
function destroy_session($sessionid)
{
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$rowsaffected = $wpdb->delete($session_table_name,array('id' => $sessionid),array('%s'));
$_SESSION = array();
return true;
}
function clean_session($expire)
{
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $session_table_name
WHERE DATE_ADD(last_accessed, INTERVAL %d SECOND) < NOW()",
$expire
)
);
return true;
}
function session_gc() {
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$query = "DELETE FROM $session_table_name WHERE last_accessed < date_sub(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)";
$wpdb->query($query);
}
add_action('init','myStartSession',1);
函数myStartSession(){
如果(!session_id()){
会话设置保存处理程序(“打开会话”、“关闭会话”、“读取会话”、“写入会话”、“销毁会话”、“清除会话”);
会话_start();
}
}
添加_操作('session_gc','session_gc');
如果(!wp_next_scheduled('session_gc'))
{
wp_时间表_事件(time(),“hourly”,“session_gc”);
}
函数open_session()
{
返回true;
}
函数关闭_会话()
{
返回true;
}
函数读取会话($sessionid)
{
全球$wpdb;
$session\u table\u name=$wpdb->prefix.“sessions”;
$query=$wpdb->prepare(
“从$session\u table\u name中选择数据
其中id=%s“,
$sessionid);
$result=$wpdb->get\u var($query);
如果($结果)
{
返回$result;
}否则
{
返回“”;
}
}
函数写入会话($sessionid,$data)
{
全球$wpdb;
$session\u table\u name=$wpdb->prefix.“sessions”;
$rowsaffected=$wpdb->replace(
$session\u table\u name,
排列(
'id'=>$sessionid,
“数据”=>$data
),
排列(
“%s”,
“%s”
));
返回true;
}
函数destroy_session($sessionid)
{
全球$wpdb;
$session\u table\u name=$wpdb->prefix.“sessions”;
$rowsaffected=$wpdb->delete($session_table_name,array('id'=>$sessionid),array('%s');
$\会话=数组();
返回true;
}
函数清除会话($expire)
{
全球$wpdb;
$session\u table\u name=$wpdb->prefix.“sessions”;
$wpdb->query(
$wpdb->prepare(
“从$session\u表\u名称中删除
其中日期添加(上次访问,间隔%d秒)prefix.“sessions”;
$query=“从上次访问的$session\u表\u名称中删除query($query);
}
有关从Wordpress外部访问$wpdb类的提示,请参阅。你可以简单地包含wp-load.php,然后我认为你可以免费获得会话行为,因为我很确定init钩子是在wp-load.php之后出现的,当然,这样做的缺点是你可能不想将Wordpress加载到你自己的页面中。你真的不应该注释掉或修改wp\u unregister\u globals。查看如何在Wordpress中实现会话而不与wp_unregister_globals发生冲突的示例 我用这个,它的效果很好:
add_action('init', 'myStartSession', 1);
function myStartSession() {
if(!session_id()) {
session_start();
}
}
<>我也会考虑将会话数据存储在数据库中而不是文件中,特别是在共享服务器环境中。该服务器上的任何其他人都可能访问您的站点会话数据并接管用户会话
在我最近的插件中,我在Wordpress数据库中创建了一个新表来存储会话数据,然后使用set_session_save_处理程序来更改行为。因此,我的开始会话脚本如下所示:
add_action('init', 'myStartSession', 1);
function myStartSession() {
if(!session_id()) {
session_set_save_handler('open_session', 'close_session', 'read_session', 'write_session', 'destroy_session', 'clean_session');
session_start();
}
}
add_action( 'session_gc', 'session_gc');
if ( ! wp_next_scheduled( 'session_gc' ) )
{
wp_schedule_event( time(), 'hourly', 'session_gc' );
}
function open_session()
{
return true;
}
function close_session()
{
return true;
}
function read_session($sessionid)
{
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$query = $wpdb->prepare(
"SELECT data FROM $session_table_name
WHERE id = %s",
$sessionid);
$result = $wpdb -> get_var($query);
if ($result)
{
return $result;
} else
{
return '';
}
}
function write_session($sessionid,$data)
{
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$rowsaffected = $wpdb->replace(
$session_table_name,
array(
'id' => $sessionid,
'data' => $data
),
array(
'%s',
'%s'
));
return true;
}
function destroy_session($sessionid)
{
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$rowsaffected = $wpdb->delete($session_table_name,array('id' => $sessionid),array('%s'));
$_SESSION = array();
return true;
}
function clean_session($expire)
{
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $session_table_name
WHERE DATE_ADD(last_accessed, INTERVAL %d SECOND) < NOW()",
$expire
)
);
return true;
}
function session_gc() {
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$query = "DELETE FROM $session_table_name WHERE last_accessed < date_sub(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)";
$wpdb->query($query);
}
add_action('init','myStartSession',1);
函数myStartSession(){
如果(!session_id()){
会话设置保存处理程序(“打开会话”、“关闭会话”、“读取会话”、“写入会话”、“销毁会话”、“清除会话”);
会话_start();
}
}
添加_操作('session_gc','session_gc');
如果(!wp_next_scheduled('session_gc'))
{
wp_时间表_事件(time(),“hourly”,“session_gc”);
}
函数open_session()
{
返回true;
}
函数关闭_会话()
{
返回true;
}
函数读取会话($sessionid)
{
全球$wpdb;
$session\u table\u name=$wpdb->prefix.“sessions”;
$query=$wpdb->prepare(
“从$session\u table\u name中选择数据
其中id=%s“,
$sessionid);
$result=$wpdb->get\u var($query);
如果($结果)
{
返回$result;
}否则
{
返回“”;
}
}
函数写入会话($sessionid,$data)
{
全球$wpdb;
$session\u table\u name=$wpdb->prefix.“sessions”;
$rowsaffected=$wpdb->replace(
$session\t