Я пытаюсь настроить его, поэтому, если вы входите на мой сайт, сеанс переносится на все поддомены моего сайта. Например, если вы перейдете на домен.com и войдите в систему, перейдите на сайт sub.domain.com, вы уже войдете в систему на sub.domain.com.
Насколько я понимаю, вы хотели бы использовать ini_set ('session.cookie_domain', '. Domain.com'), а затем session_start (), а затем установить свои переменные сеанса, но это не работает.
Пример того, что я делаю:
Код для домена.com:
<?php ini_set('session.cookie_domain','.domain.com'); session_start(); $_SESSION['variable'] = 1; ?>
Код для sub.domain.com:
<?php session_start(); echo $_SESSION['variable']; ?>
Но $ _SESSION ['variable'] не задано.
Я также попытался использовать ini_set () в коде sub.domain.com, но это не имело значения. Я проверил, что настройка session.cookie_domain работает с использованием ini_get ().
Что я делаю не так? Благодаря!
Сначала проверьте ini_set
<?php ini_set('session.cookie_domain','.domain.com'); echo ini_get('session.cookie_domain'); session_start(); $_SESSION['variable'] = 1; ?>
Обновить:
Просто подумал об этом .. Вы тоже попробовали:
<?php session_set_cookie_params( 0, "/", ".domain.com", false, false); session_start(); $_SESSION['variable'] = 1; ?>
Обновление 2: обработка ALternate (ручная обработка файлов cookie)
<?php session_start(); session_regenerate_id(); $_SESSION['variable'] = "String Test"; setcookie('PHPSESSID',session_id(),time()+86400,'/','.domain.com'); echo session_id(); ?>
и в файле поддомена
<?php if (isset($_COOKIE['PHPSESSID']) && !empty($_COOKIE['PHPSESSID'])) session_id($_COOKIE['PHPSESSID']); session_start(); echo $_SESSION['variable'] . "<br />"; echo $_COOKIE['PHPSESSID'] . "<br />"; echo session_id(); ?>
Три строки, которые вы можете добавить к каждому файлу для передачи / обработки информации о сеансе
if (isset($_COOKIE['PHPSESSID']) && !empty($_COOKIE['PHPSESSID'])) session_id($_COOKIE['PHPSESSID']); session_start(); if (!isset($_COOKIE['PHPSESSID'])) setcookie('PHPSESSID',session_id(),time()+86400,'/','.domain.com');
Какую информацию вы проходите через сеанс? Или вы используете его для обработки логинов и т. Д.?
Ну, если все остальное не удастся, вы можете реализовать свои собственные сеансы – все $_SESSION
в PHP – это оболочка с файлом cookie set / get и файловым хранилищем с файловой поддержкой. Если вы храните файл cookie вручную с идентификатором и затем связываете данные с этим идентификатором (например, в БД, даже), вы можете получить практически ту же функциональность ( serialize()
может помочь, если вы хотите сохранить кучу изменяющихся данных сеанса ).
Я знаю, что уже поздно, но, увидев, что это единственный правильный ответ, который я нашел, и люди будут использовать его, так как ответ проголосовали, я хотел бы отметить, что это сеанс, ожидающий своего служения. Поэтому решение для этого:
define("ENCRYPTION_KEY", "whatever you want to use as key"); // encryption key if (isset($_COOKIE['SessionEncrypt']) && !empty($_COOKIE['SessionEncrypt'])) { //echo "get cookie: ".$_COOKIE['SessionEncrypt']; //urldecode(decrypt($_COOKIE['SessionEncrypt'], ENCRYPTION_KEY)); session_id(decrypt(urldecode($_COOKIE['SessionEncrypt']), ENCRYPTION_KEY)); //session_id($_COOKIE['SessionEncrypt']); } session_start(); setcookie('SessionEncrypt',urlencode(encrypt(session_id(), ENCRYPTION_KEY)),time()+86400,'/','yourdomain.com'); // will work cross subdomain
Чтобы зашифровать / расшифровать (найти его здесь где-то, работает как шарм):
function encrypt($pure_string, $encryption_key) { $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, utf8_encode($pure_string), MCRYPT_MODE_ECB, $iv); return $encrypted_string; } function decrypt($encrypted_string, $encryption_key) { $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, $encrypted_string, MCRYPT_MODE_ECB, $iv); return $decrypted_string; }
Таким образом, никто не может прочитать сеанс в файле cookie. Потому что вам не обязательно быть гением, чтобы вставить файл cookie в ваш браузер. При этом люди склонны забывать, что сеансы на самом деле читаемы с сервера. Если ваш браузер может достичь этого, то и другие программы.