Проблема я столкнулся в два раза:данные сеанса не передаются на другие страницы
- Я хотел бы использовать свой сессионный класс-обертку как способ создания сеансов на нескольких страницах.
- Хотелось бы закончить вышеуказанные сеансы после установленного таймаута.
В качестве примера использования, если мой сайт потребовал аутентификации перед доступом к странице, я бы создал экземпляр моей оболочки сеанса, если учетные данные пользователя были действительными, и я перенаправил их на страницу учетной записи.
// index.php
if (invalidUser) {
// Show error
} else if(userIsValid($user_email, $user_pass)) {
$sess = new Session("MySite", 10);
Utils::redirect("accountPage.php");
}
Вот метод утилита, которая перенаправляет на страницу счета:
// utils.php
ob_start(); // Start output buffer
/**
* Redirects the HTTP header to another location.
*
* @param (String) $address the new location to send the browser.
*/
public static function redirect($address) {
header("Location: $address");
exit();
}
Вот реализация класса сессии обертку:
// session.php
class Session {
/**
* Default Constructor.
*
* @param (String) $name the name of the session, as well as the session cookie name
* @param (String) $timeout the amount of time to permit the existence of
* this session.
* -1, indicates that the session should live on indefinetely.
*/
function __construct($name, $timeout = -1) {
session_name($name);
session_start();
$_SESSION["timeout"] = $timeout;
$_SESSION["created"] = time();
}
/**
* Determines if the session is still considered "alive" based on its
* timeout + creation time.
* If the session has expired we remove the session effectively "Timing out".
*/
public static function isExpired() {
// Default infinite timeout case
if ($_SESSION["created"] == -1) {
return false;
}
// Evaluate time left on session
if(($_SESSION["timeout"] + $_SESSION["created"]) <= time()) {
// Remove Session
return true;
} else {
// Session has not expired yet
return false;
}
}
}
Я ожидал бы данные в пределах $_SESSION
global
массив на этой странице, но его NULL
. Я читал подобные сообщения, но, я думаю, что у меня что-то не хватает с моей конкретной реализацией.
// accountsPage.php
<?php
include_once("session.php");
Session::isExpired(); => false
print_r($_SESSION); => NULL
Я знаю, что это частично работает, потому что если я не перенаправлять, а затем распечатать $_SESSION
global
массив есть данные в нем. Я знаю о добавлении session_start()
в начале каждой страницы, но я хотел бы облегчить создание дополнительных сессий и файлов cookie.
Любая помощь была бы очень благодарна заранее!
Очень красиво сделано! – Romelus