【问题标题】:php session on page 1 and page 2第 1 页和第 2 页上的 php 会话
【发布时间】:2013-02-26 11:08:42
【问题描述】:

这是我的问题,我可以说 2 页第 1 页和第 2 页,我需要打开会话并在第 1 页上设置 cookie,该 cookie 将保留 1 小时,并在每次页面刷新时重置。现在第 2 页的故事略有不同,首先第 2 页不应该打开任何会话,而是应该检查在第 1 页上打开的任何会话是否仍然有效,如果它仍然有效,则继续处理任何请求是和但是,如果访问第 2 页的访问者直接通过保存的 url 访问第 2 页,或者在会话 cookie 过期后的任何时间访问第 2 页,则在 cookie 的生命周期内保留,则访问者应重定向到第 1 页。

这是我迄今为止在第 1 页所做的工作

<?php
function startSession($time = 3600, $ses = 'MYSES') {
    session_set_cookie_params($time);
    session_name($ses);
    session_start();

    // Reset the expiration time upon page load
    if (isset($_COOKIE[$ses]))
      setcookie($ses, $_COOKIE[$ses], time() + $time, "/");
}
?>

问题是,我不知道该做什么以及如何做其余的以及我应该在第 2 页上显示什么?

这是我在第 2 页上尝试过的,但没有成功。

<?php
if (!isset($_SESSION));{
$a = session_id();
if(empty($a) and $_SERVER['HTTP_REFERER']);{
    header('location: page1.html');}}
?>

请大家帮忙。

【问题讨论】:

  • 乍一看,我可以看到一个错误。尝试在第一个 if 之后删除分号:if (!isset($_SESSION)){
  • 我刚刚做了,但似乎仍然没有发生任何事情,不确定放在第 1 页上的脚本是否真的有效?
  • 在第2页使用之前开始你的会话。session_start();
  • @Ranjith,我也试过了,还是没有结果

标签: php session session-variables session-cookies session-timeout


【解决方案1】:

撇开语法问题不谈,看起来您根本没有使用 $_SESSION,要使用 $_SESSION,您必须在任何输出之前声明 session_start()。因此,在您的情况下,可能只使用 Cookie。

第 1 页(page1.php):

<?php
    function extendCookie($time = 3600) {
        setcookie('MYSES', 'dummy var', time() + $time, "/");
    }
    extendCookie(); //extend cookie by 3600 seconds (default)
?>
You are on page 1.<br />
<a href="page2.php">Click to proceed to page 2</a>

第2页(page2.php):

<?php
    if (!isset($_COOKIE['MYSES'])){
        header('location: page1.php');
    }
?>
You are on page 2.

如果你想使用会话,可以这样:

第 1 页(page1.php):

<?php
    session_start();
    function extendSession($time = 3600) {
        $_SESSION['expire_time'] = time() + $time;
    }
    extendSession(7200); //extend session by 7200 seconds
?>
You are on page 1.<br />
<a href="page2.php">Click to proceed to page 2</a>

第2页(page2.php):

<?php
    session_start();
    if (!isset($_SESSION) || $_SESSION['expire_time'] < time()){
        session_destroy(); //Optional, destroy the expired session.
        header('location: page1.php');
    }
?>
You are on page 2.

【讨论】:

  • 谢谢,由于某种原因它不起作用,我完全按照您在示例中提到的那样,但是我没有停留在第 2 页,而是被重定向回第 1 页。
  • 抱歉,修正了,我粗心了。有关如何使用 cookie,请参阅 php.net/manual/en/function.setcookie.php
  • 出于某种原因,当我试图通过从第 1 页发出请求来访问页面时,我仍然会在第 1 页结束。为了澄清,我正在使用您拥有的 session_start() 脚本提供。
  • 会不会是我把函数名改成了extendSession,你还在调用startSession?
  • 说不出来为什么,我已经完全按照上面的方式使用了,但仍然没有令人满意的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多