を働いていない私は、WebアプリはGoogle App Engineのを使用してホストされている必要があり、それはユーザーがログインしているかどうかを確認するためにPHPのセッションを使用するなどGAE - PHPのセッションが
session_start()
が設定を通じて、すべてのスクリプトに存在していますそれらのすべてに含まれている.phpスクリプト。このアプリケーションはIframeで動作し、そのアプリケーションはsession_start()
コールを受信します。
ローカルでは、非常にうまく動作しますが、展開すると、ユーザーがログインした後に$ _SESSIONS変数の期限が切れるように動作します。たとえば、ユーザーがログインフォームを送信すると、ページは再度ログインにリダイレクトされます。 (これは、ユーザーがログインしていないときのすべてのページで予想される動作です)。これはランダムなイベントです。時にはうまくいくこともありますが、時にはうまくいかないこともあります
session.cookie_lifetime=0
でphp.iniを変更して、スクリプトの最上行にsession_start()を入れてみました。
ここで(すべてのスクリプトに含まれている)config.phpのスクリプトです:デフォルトの展開は、複数の使用
<?php
// vincular arquivos de configurações e classes
require_once($_SERVER['DOCUMENT_ROOT']. '/config.php');
require_once($_SERVER['DOCUMENT_ROOT']. '/head.php');
use orm\orm\TblUsuarioQuery As UsuarioQuery;
use orm\orm\TblGrupoQuery As GrupoQuery;
$redirect = isset($_GET['r']) ? $_GET['r'] : '/scope_home.php';
// Checar se o login está correto
$errmsg = "Entre com seu usuário ou e-mail e senha:";
if (isset($_POST['user']) && isset($_POST['pass'])) {
$user = filter_var($_POST['user'], FILTER_SANITIZE_STRING);
$pass = filter_var($_POST['pass'], FILTER_SANITIZE_STRING);
$q = new UsuarioQuery();
if (strpos($user, '@') !== false) {
$usuario = $q->filterByEmail($user)->findOne();
} else {
$usuario = $q->filterByLogin($user)->findOne();
}
if ($usuario == null) {
$errmsg = "Usuário ou e-mail não existe. Verifique e tente novamente:";
} else {
$q = new GrupoQuery();
$grupo = $q->filterByTblUsuario($usuario)->findOne();
if (!password_verify($pass, $usuario->getSenha())) {
$errmsg = "Usuário ou senha incorretos. Verifique e tente novamente:";
} else {
/* inicia a sessão */
$_SESSION['username'] = $usuario->getLogin();
$_SESSION['userid'] = $usuario->getCodUsuario();
$_SESSION['empresa'] = $grupo->getCodEmpresa();
}
}
}
// Usuário logado?
if (isset($_SESSION['userid'])) {
// redireciona para o url solicitado
header('Location: http://'. ROOT_HOST . $redirect); // sim, redireciona
}
?>