Сессия не будет работать с www

Хорошо, вот моя проблема: когда пользователь входит в мой сайт, я помещаю всю свою информацию пользователя в сеанс, подобный этому

session_start(); //Put all user info into session cookie $_SESSION["login"] = 'true'; $_SESSION["id"] = $user_info['id']; $_SESSION["firstname"] = $user_info['firstname']; $_SESSION["lastname"] = $user_info['lastname']; $_SESSION["screen_name"] = $user_info['screen_name']; $_SESSION["facebook"] = $user_info['facebook']; $_SESSION["email"] = $user_info['email']; $_SESSION["date_joined"] = $user_info['date_joined']; $_SESSION["account_type"] = $user_info['account_type']; $_SESSION["account_active"] = $user_info['account_active']; $_SESSION["hashed_password"] = $user_info['hashed_password']; 

Проблема заключается в том, что они вошли в систему с сайта www.domain.com, а затем попали на страницу в домене com.com или по-другому, чтобы войти в систему с сайта domain.com, и в конечном итоге на странице www.domain.com сохранена информация в сеансе недоступно.

Как я могу получить информацию о сеансе независимо от того, вошли ли они в систему с www или нет?

@ Г-н Гроссман

Было бы правильным сделать что-то вроде этого:

  <?php //Ok I modified the code so I don't get the undefined errors I was getting //OLD CODE //$currentCookieParams = session_get_cookie_params(); //$rootDomain = '.domain.com'; //session_set_cookie_params( //$currentCookieParams["3600"], //$currentCookieParams["/"], //$rootDomain, //$currentCookieParams["false"], //$currentCookieParams["false"] //); //session_name('mysessionname'); //NEW CODE $rootDomain = '.beckerfamily1.com'; session_set_cookie_params( 3600, '/', $rootDomain, false, false); session_start(); if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 2700)) { // last request was more than 45 min ago if(isset($_SESSION['id'])){ $connection = mysql_connect('localhost', '******', '*******'); if (!$connection){ die('Database connection failed: ' . mysql_error()); } $db_select = mysql_select_db('beckerfamily'); if(!$db_select){ die('Could not select database: ' . mysql_error()); } $query = "UPDATE users SET online='no' WHERE id='{$_SESSION['id']}' LIMIT 1"; $result = mysql_query($query); if (!$result) { die("Database query failed: " . mysql_error()); } } $_SESSION = array(); if(isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } session_destroy(); // destroy session data in storage session_unset(); // unset $_SESSION variable for the runtime if(isset($connection)){ mysql_close($connection); } } $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp ?> 

Также необходимо иметь session_name('mysessionname'); или я могу просто опустить это, и PHP сам установит имя сеанса?

Related of "Сессия не будет работать с www"

Файлы cookie (например, cookie PHPSESSID) доступны только в том домене, на котором они были установлены. Вы можете сделать домен, включающий все поддомены:

 ini_set('session.cookie_domain', '.example.com' ); 

или если конфигурация не позволяет вам переопределить это,

 $currentCookieParams = session_get_cookie_params(); $rootDomain = '.example.com'; session_set_cookie_params( $currentCookieParams["lifetime"], $currentCookieParams["path"], $rootDomain, $currentCookieParams["secure"], $currentCookieParams["httponly"] ); session_name('mysessionname'); session_start(); 

http://php.net/manual/en/function.session-set-cookie-params.php

Еще лучше может выбрать, хотите ли вы, чтобы ваш сайт обращался через www или нет, и перенаправлять все запросы другому.

Я не уверен, какой язык вы используете, но вам нужно изменить свойство «domain» вашего cookie сеанса. Если вы установили домен cookie на «domain.com», он будет доступен как на «domain.com», так и на «www.domain.com».