Wednesday, April 12, 2017

Session lost after form submit in wordpress

Leave a Comment

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

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment