0

我想知道在我的应用程序中主要是 php,这是保持用户登录到站点直到他们注销的最佳方法。可以是令牌、会话寿命、cookie 等吗?

目前这是我的登录和注销系统的工作方式:

当用户登录时,它会将他们的详细信息存储在 $_SESSION 中:

if (isset($_SESSION['teacherid'])) {

      $userid = $_SESSION['teacherid'];

  }

if (isset($_SESSION['teacherusername'])) {

      $username = $_SESSION['teacherusername'];

  }

然后在每个脚本中,它包含下面的代码,其中 sessionlife 持续 12 小时:

<?php

ini_set('session.gc_maxlifetime',12*60*60);
ini_set('session.gc_divisor', '1');
ini_set('session.gc_probability', '1');
ini_set('session.cookie_lifetime', '0');
require_once 'init.php'; 

session_start();

?>

init.php 如下:

 <?php
 session_save_path('Session'); 
 ?>

现在在 12 小时后用户下次刷新页面时,由于会话将被销毁,它会进入注销页面:

    if ((isset($username)) && (isset($userid))){
        session_destroy();
        echo "You have been Logged Out | <a href='./home.php'>Home</a>";
    }

    else {

        echo "You are Not Logged In";

    }

显然,如果用户单击注销页面,那么它会导航到上面的脚本。

但这是一个好方法吗?有没有更方便的方法,因为如果您查看适当的 Web 应用程序,它们可以让用户保持登录数天,但他们是如何做到的呢?

谢谢

4

1 回答 1

7

会话将在紧要关头进行,它们足够安全(尽管不要引用我的话),但根据服务器使用情况和配置,您的会话可能会在 12 小时之前被清除。

登录后,我启动一个会话并将cookie 保存到他们的计算机上。此 cookie 包含一个唯一生成的字符串及其帐户 ID。

当他们刷新页面时,将运行以下命令(伪代码):

if (session_exists) continue();
else if (!session_exists AND cookie_exists AND validate_cookie()) {
    login_user_via_cookie();
    continue();
else show_login_page();
于 2012-11-07T13:53:51.120 回答