Sie sollten wirklich nicht kommentieren oder wp_unregister_globals ändern. Checkout http://silvermapleweb.com/using-the-php-session-in-wordpress/ für Beispiele, wie Sitzungen in Wordpress erreicht werden, ohne mit wp_unregister_globals zu verwirren.
Ich benutze dies und es funktioniert einen Genuss:
add_action('init', 'myStartSession', 1);
function myStartSession() {
if(!session_id()) {
session_start();
}
}
Ich würde auch prüfen, Ihre Sitzungsdaten in der Datenbank zu speichern, anstatt in Dateien, vor allem, wie Sie in einer gemeinsam genutzten Server-Umgebung sind. Jeder andere Benutzer auf diesem Server kann möglicherweise auf die Sitzungsdaten Ihrer Site zugreifen und eine Benutzersitzung übernehmen.
In meinem neuesten Plugin habe ich eine neue Tabelle in der Wordpress-Datenbank erstellt, um Sitzungsdaten zu speichern, und dann set_session_save_handler verwenden, um das Verhalten zu ändern. So wurde mein Start Session Skript etwas wie folgt aus:
add_action('init', 'myStartSession', 1);
function myStartSession() {
if(!session_id()) {
session_set_save_handler('open_session', 'close_session', 'read_session', 'write_session', 'destroy_session', 'clean_session');
session_start();
}
}
add_action('session_gc', 'session_gc');
if (! wp_next_scheduled('session_gc'))
{
wp_schedule_event(time(), 'hourly', 'session_gc');
}
function open_session()
{
return true;
}
function close_session()
{
return true;
}
function read_session($sessionid)
{
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$query = $wpdb->prepare(
"SELECT data FROM $session_table_name
WHERE id = %s",
$sessionid);
$result = $wpdb -> get_var($query);
if ($result)
{
return $result;
} else
{
return '';
}
}
function write_session($sessionid,$data)
{
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$rowsaffected = $wpdb->replace(
$session_table_name,
array(
'id' => $sessionid,
'data' => $data
),
array(
'%s',
'%s'
));
return true;
}
function destroy_session($sessionid)
{
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$rowsaffected = $wpdb->delete($session_table_name,array('id' => $sessionid),array('%s'));
$_SESSION = array();
return true;
}
function clean_session($expire)
{
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $session_table_name
WHERE DATE_ADD(last_accessed, INTERVAL %d SECOND) < NOW()",
$expire
)
);
return true;
}
function session_gc() {
global $wpdb;
$session_table_name = $wpdb -> prefix . "sessions";
$query = "DELETE FROM $session_table_name WHERE last_accessed < date_sub(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)";
$wpdb->query($query);
}
Siehe http://www.stormyfrog.com/using-wpdb-outside-wordpress/ für gibt Tipps für die $ wpdb Klasse von außerhalb Wordpress. Sie könnten einfach wp-load.php hinzufügen, dann denke ich, dass Sie das Session-Verhalten kostenlos bekommen würden, da ich ziemlich sicher bin, dass der Init-Hook nach wp-load.php kommt, der Nachteil ist natürlich, dass Sie den Overhead setzen Laden von Wordpress in Ihre eigenen Seiten, die Sie nicht wollen.
Kann der Pfad von Ihrem Server beschreibbar sein? Der übliche Pfad für die Sitzung ist '/ tmp /', denke ich. – frz3993
Cross-Site-Sitzungen Hmmmm ich hoffe nicht. Sind das 2 verschiedene Domains? – RiggsFolly
Haben Sie überprüft, ob sich die Cookies Ihres Browsers geändert haben? Ich weiß, dass Sie überprüft haben, ob es aktiviert ist, aber haben Sie überprüft, ob der Browser neue Cookies erhalten hat oder dieselben alten Cookies beibehalten hat? – SOFe