Вы действительно не должны закомментировать или изменить wp_unregister_globals. Оформить заказ http://silvermapleweb.com/using-the-php-session-in-wordpress/ для примеров того, как выполнять сеансы в Wordpress без использования wp_unregister_globals.
Я использую это и работает лакомство:
add_action('init', 'myStartSession', 1);
function myStartSession() {
if(!session_id()) {
session_start();
}
}
Я хотел бы также рассмотреть вопрос о хранении данных сессии в базе данных, а не в файлах, в частности, как вы находитесь в общей среде сервера. Любой другой на этом сервере может потенциально получить доступ к данным сеанса вашего сайта и взять на себя сеанс пользователей.
В моем последнем плагине я создал новую таблицу в базе данных Wordpress для хранения данных сеанса, а затем использовал set_session_save_handler для изменения поведения. Так что мой запуск сеанса сценарий стал что-то вроде этого:
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);
}
См http://www.stormyfrog.com/using-wpdb-outside-wordpress/ советы по доступу к классу $ wpdb снаружи Wordpress. Вы могли бы просто включить wp-load.php, тогда я думаю, что вы получите бесплатную сессию, так как я уверен, что начальный крючок появляется после wp-load.php, что отрицательно сказывается на том, что вы накладываете накладные расходы загрузки Wordpress на свои собственные страницы, которые вы, возможно, не захотите.
Есть ли путь, доступный для записи на вашем сервере? Обычный путь для сеанса - '/ tmp /', я думаю. – frz3993
Межсетевые сессии Хмммм Надеюсь, что нет. Являются ли эти 2 разных домена? – RiggsFolly
Вы проверили, изменились ли cookie вашего браузера? Я знаю, что вы проверили, включено ли это, но вы проверили, получил ли браузер новые куки-файлы или сохранил те же старые файлы cookie? – SOFe