If you have links from your website to other domains even if they open in new windows, session data will be lost. I am using a session variable to store the number of hits and avoid the problem by opening links in the top location - this will of course give you the bonus of an extra hit when the visitor returns!
Sessionbehandlung
- Einführung
- Installation/Konfiguration
- Vordefinierte Konstanten
- Beispiele
- Sessions und Sicherheit
- Session-Funktionen
- session_cache_expire — Liefert die aktuelle Cache-Verfallszeit
- session_cache_limiter — Liefert und/oder setzt die aktuelle Cacheverwaltung
- session_commit — Alias von session_write_close
- session_decode — Dekodiert die Daten einer Session aus einer Zeichenkette
- session_destroy — Löscht alle in einer Session registrierten Daten
- session_encode — Kodiert die Daten der aktuellen Session als Zeichenkette
- session_get_cookie_params — Liefert die Session-Cookie Parameter
- session_id — Liefert und/oder setzt die aktuelle Session-ID
- session_is_registered — Überprüft, ob eine globale Variable in einer Session registriert ist
- session_module_name — Liefert und/oder setzt das aktuelle Session-Modul
- session_name — Liefert und/oder setzt den Namen der aktuellen Session
- session_regenerate_id — Ersetzt die aktuelle Session-ID durch eine neu erzeugte
- session_register — Registriert eine oder mehrere globale Variablen in der aktuellen Session
- session_save_path — Liefert und/oder setzt den aktuellen Speicherpfad der Session
- session_set_cookie_params — Setzt die Session-Cookie Parameter
- session_set_save_handler — Setzt benutzerdefinierte Session-Speicherfunktionen
- session_start — Initialisiert eine Session
- session_unregister — Hebt die Registrierung einer globalen Variablen in der aktuellen Session auf
- session_unset — Löscht alle Session-Variablen
- session_write_close — Speichert die Session-Daten und beendet die Session
Sessions
master dot twinkle at virgin dot net
08-Sep-2008 09:32
08-Sep-2008 09:32
SebastianJu
21-Aug-2008 11:41
21-Aug-2008 11:41
Cant believe this problem isnt described herein. I wondered why my session-variables lost their values when going from first site to second site. Both had a session_start();.
A session is working only on one domain. Subdomains dont use the Session of the maindomain. That means if someone comes to your site at yourdomain.com and the session is started there and then clicks a link where he is lead to www.yourdomain.com then the old session isnt working there anymore. Because www. is a subdomain.
In the practice that will mean a lot of lost sessions only because webmasters dont know this behaviour. I have never read a word about this in manuals or somewhere...
The solution is to put this code before the first session_start();
ini_set("session.cookie_domain",substr($_SERVER[HTTP_HOST],3));
Now it works. At the second place of parameters has to come in ".yourdomain.com" (with a dot before). With that the subdomains will use the same session like the maindomain. In this example domainname taken from Server-variable.
Greetings!
Sebastian
zareef at zareef dot net
11-Aug-2008 02:54
11-Aug-2008 02:54
Persistence of session data in included file also has one more aspects if you are including a file using/over the http connection.
Session will not be available without refresh (it's a separate thread even if you are on the same domain/server), which is again a correct behavior, but if you are including a file from local file system then it should have session data if you are setting and accessing the $_SESSION variable even before page refresh because it is available globally.
<?php
session_start();
$_SESSION['example']="yes";
Include("otherfile");
?>
Session variable will be available in included file.
<?php
session_start();
$_SESSION['example']="yes";
Include("http://domain.com/otherfile.php");
?>
Session will NOT be available in other file.
BUt if both files are on same server then after refresh values will be available.
Madster
28-Jul-2008 10:45
28-Jul-2008 10:45
When you include a php file in your current script it's included, not processed separately, thus it's still within the same page and the current page hasn't finished processing.
Thus, session is not set yet. This is the expected behaviour.
If you need to load a page after setting session data, you should set session data and then send a redirection or refresh header (remember not to send anything, not even whitespace before sending headers).
Always consider session data to be updated after the next page load (as in http request completed).
mike at basementideas dot com
08-Jul-2008 03:05
08-Jul-2008 03:05
The note about an included file not being able to access the sessions is not true. You just have to do a session_start(); in the included file.
This is what drove me here today, because I was noticing the same thing. But I tried the above on a whim and it works fine. You wouldn't think you'd need to start a session twice, but I guess the scripts are looked on as separate in that regard.
Mike
pushedx
02-Jul-2008 01:01
02-Jul-2008 01:01
Here is something to watch out for when working with sessions.
Let's say you have two pages, Page A and Template Z. If Page A sets session data and includes Template Z, the session data is not properly registered for the execution of Template Z due to how session data is written *after* a script has executed [1].
As a result, your second page will not have the right session data, so you are a bit in a pickle. I'm sure there are other work arounds, perhaps with cookies or flat files, but you cannot use session data in that fashion.
The reason I have this setup is because I will have a number of Page A-Z's that will contain page specific content and one Template Z page that renders each page's specific content in the site layout. This way, the site content changing is independent of the style the site uses and the site style can change without modifying the actual content. It's a dynamically configurable site template design.
[1] See the "session_write_close" documentation page.
