php - Why is session variable not being saved after redirect in Chrome only? -


in firefox, session variable saved , retrievable after redirect in chrome, after redirect, says doesn't exist.

redirect code:

session_start(); $_session[ "test" ] = "exists"; session_write_close(); header( "http/1.1 301 moved permanently" ); //removing 301 line doesn't header( "location: http://" . $_server[ "http_host" ] . "/" ); exit(); 

retrieving session:

session_start(); if ( isset( $_session[ "test" ] ) ) {     echo $_session[ "test" ];     unset( $_session[ "test" ] ); } 

why doesn't work in chrome?

edit: think found answer doesn't make sense. if remove line unset( $_session[ "test" ] ) saves session after redirect! why occur? session should server-side. , unset after "echo" statement! how not echo value because unset variable after that?!

does know what's going on?

it may problem way redirect being handled. you're presently telling browser redirect offsite (even though we're not going offsite) specifying http:// in header location.

header( "location: http://" . $_server[ "http_host" ] . "/" ); 

if replace may browser keep session alive since believes on same site:

header("location: /"); 

also, happens if this:

if (!empty( $_session[ "test" ] ) ){ $test = $_session[ "test" ]; unset( $_session[ "test" ] );  echo $test; } 

php if i'm not mistaken perform server side functions first, return code user print , echo statements.

if i'm right, bit of code work both of browsers if indeed unset command making code not work (since we're saving var can echoed after session destroyed.

if doesn't work, difference in browser session handling more due redirect.

update

also note 301 redirects can cached. you're performing these functions on page you've told browser permanently moved. may not seeing page sets session @ if it's relying on cache on subsequent attempts.

update 4/22

after checking headers. in versions of chrome i'm running (version 26.0.1410.64 m on windows , version 26.0.1410.65 on mac os) not experience particular issue. whether local urls vs offsite urls there , regardless of existence of unset() command.

you can open developer tools in chrome (tools > developer tools or ctrl-shift-i on windows or command-shift-i on mac) , see header output under network tab. there may going on domain redirecting causing session dropped.

it might specific setting on local machine or chrome build particular os (if it's different own). additionally might configuration setting in php , how you're passing sessions. pasted code directly question new page , created page redirect to. upon testing, of browsers (chrome, firefox, ie (7,8,9), opera, safari, , mozilla) on machines "exists."

here test machine's session settings (from phpinfo()): php sessions screenshot


Comments

Popular posts from this blog

c# - Send Image in Json : 400 Bad request -

jquery - Fancybox - apply a function to several elements -

An easy way to program an Android keyboard layout app -