我提交的会话在提交表单后丢失。
我已经构建了会话类来设置新会话,取消设置等等。在wordpress模板的function.php中。
if (!session_id()) {
session_start();
}
include get_template_directory() . "/custom/session.php";
class session {
function __construct() {
}
function set_flashdata($name, $value) {
$_SESSION[$name] = $value;
}
function flashdata($name) {
if (isset($_SESSION[$name])) {
$str = $_SESSION[$name];
return $str;
} else {
return FALSE;
}
}
function userdata($name) {
if (isset($_SESSION[$name])) {
return $_SESSION[$name];
} else {
return FALSE;
}
}
function set_userdata($name, $value) {
$_SESSION[$name] = $value;
}
function unset_userdata($name) {
if (isset($_SESSION[$name])) {
unset($_SESSION[$name]);
}
}
}
我尝试将会话设置为:
<?php
$sess = new session();
$sess->set_userdata('sess_name',"some value");
?>
<form action="get_permalink(212);">
//input buttons
</form>
提交表格后,它进入固定链接(212)。然后我试了。
<?php
$sess = new session();
$value = $sess->userdata('sess_name');
var_dump($value); //returns false. That means session is lost after form submit. Why?
?>
答案 0 :(得分:8)
您必须始终为每个请求调用session_start()。
session_start()的任务是:
这意味着,如果您已创建会话,并且未调用方法session_start(),则不会实现变量$ _SESSION。
除外:如果您的 php.ini 中已将选项session.auto_start设置为1,那么在这种情况下,无需调用session_start()因为变量$ _SESSION是隐式实现的。
答案 1 :(得分:8)
您需要将会话开始/恢复移动到Session的构造函数中。
像这样:
class session
{
function __construct()
{
if (! session_id()) {
session_start();
}
}
另外需要提及的是,每当您new Session
,您将获得使用相同全局变量$_SESSION
的相同功能的对象。
您不需要多个$session
个对象,现在是调查Singleton pattern
的好时机。
答案 2 :(得分:3)
你需要使用wordpress全局变量来设置会话的条件,或者不是:
global $session;
if (!session_id()) {
session_start();
}
include get_template_directory() . "/custom/session.php";
答案 3 :(得分:3)
对我来说,session_start()
未在get_permalink(212;)
引用的页面的开头设置{<1}}。
我几乎没有WP本身的经验,所以我可能会误解get_permalink()
的功能
答案 4 :(得分:3)
这可能是由于www。在您的网站域名的开头。确保两个页面使用相同的结构。
此外,我很久以前在表单将数据发送到安全地址时面临同样的问题(https://)
我希望这两项可以帮到你。
答案 5 :(得分:0)
我同意@ rock3t在类的构造函数中初始化会话的答案,但是每次启动一个类对象时,它都会去检查会话!
相反,如果你没事,访问会话的最简单方法是在调用 wp-settings之前将以下行添加到 wp-config.php 文件中EM>
if (!session_id())
session_start();
这将全局设置/初始化会话,您不需要在类的构造函数中设置/检查session_start。
谢谢。
答案 6 :(得分:-1)
您可以检查会话是否首先设置...表单的内容是什么? ...还有你的php脚本没有session_start().. is function.php包含在你的php脚本中