The session I set is lost after the form is submitted.
I had built the session class to set new session, unset and so on. In function.php of wordpress template.
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]); } } }
I try to set session as :
<?php $sess = new session(); $sess->set_userdata('sess_name',"some value"); ?> <form action="get_permalink(212);"> //input buttons </form>
After submit the form it goes to the permalink(212). Then I tried.
<?php $sess = new session(); $value = $sess->userdata('sess_name'); var_dump($value); //returns false. That means session is lost after form submit. Why? ?>
6 Answers
Answers 1
You have to call always session_start() for each request.
The mission of session_start() is:
- Creates a new session
- Restart an existing session
That means, if you have created a session, and you don't call to the method session_start(), the variable $_SESSION is not going to be fulfilled.
Except: If in your php.ini you have set the option session.auto_start to 1, then, in that case it is not needed to call the session_start() because the variable $_SESSION is fulfilled implicitly.
Answers 2
You need to move session start/resume into your Session's constructor.
Like so:
class session { function __construct() { if (! session_id()) { session_start(); } }
Another thing to mention, every time you'll do new Session
you'll be getting an object of the same functionality working with same global variable $_SESSION
.
You don't need more than one $session
object, it would be a good time to look into Singleton pattern
.
Answers 3
You need to use wordpress global variable for condition that session is set or not something like :
global $session; if (!session_id()) { session_start(); } include get_template_directory() . "/custom/session.php";
Answers 4
Sounds to me like session_start()
is not set at the start of the page that get_permalink(212;)
refers to.
I have almost experience with WP itself though, so I might misunderstand the functionality of get_permalink()
Answers 5
It might be due to www. at the start of your website domain. Make sure that both of pages use the same structure.
Also I faced with the same issue long time ago when the form sends the data to a secured address (https://)
I hope these two items may help you.
Answers 6
can you check if the session is getting set in the first place... what are the contents of your form ? ... also your php script don't have session_start() .. is function.php is included in your php script
0 comments:
Post a Comment