我设置的会话在表单提交后丢失。
我构建了会话类来设置新的会话、未设置的会话等等。在wordpress模板的function.php中。
function.php
if (!session_id()) {
session_start();
}
include get_template_directory() . "/custom/session.php";
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>
在提交表单后,它将转到permalink(212)。然后我试了。
<?php
$sess = new session();
$value = $sess->userdata('sess_name');
var_dump($value); //returns false. That means session is lost after form submit. Why?
?>
发布于 2017-04-08 10:04:07
您需要将会话开始/恢复移动到会话的构造函数中。
就像这样:
class session
{
function __construct()
{
if (! session_id()) {
session_start();
}
}
另外要提到的是,每次执行new Session
时,都会得到一个具有相同功能的对象,使用相同的全局变量$_SESSION
。
您不需要多个$session
对象,现在是查看Singleton pattern
的好时机。
发布于 2017-04-07 01:41:17
您必须为每个请求调用session_start()。
session_start()的任务是:
这意味着,如果您已经创建了一个会话,并且没有调用方法session_start(),变量$_SESSION就不会实现。
(除外):如果在php.ini中将选项开始设置为1,则不需要调用session_start(),因为变量$_SESSION是隐式实现的。
发布于 2017-04-02 21:01:48
您需要使用wordpress全局变量作为会话设置或不设置的条件,如下所示:
global $session;
if (!session_id()) {
session_start();
}
include get_template_directory() . "/custom/session.php";
https://stackoverflow.com/questions/43176441
复制