我用一个简单的登录系统的基础上届会议var.一旦户登录后,一届会议var设,告诉我的脚本用户是可以接受的。我不要使用任何定义的客户方cookie var.

我想提出的选项登录屏幕上的那个说"让我loggued在整个一天"。一个人如何在一个安全的方式?

有帮助吗?

解决方案

第一:配置 session.cookie_lifetime 指令,无论是在php.ini,配置文件,或通过 session_set_cookie_params().

接下来,储存用户名和散列值的密码在本届会议,并确认登录在每一页上。只要它仍然是有效的,他们得到住登录。

本届会议cookie的自然到期一般应当保持整洁,你不会有任何人获得记录在它们中间的会议(若星盟的),如果他们保持它的活动。如果做不到这一点,虽然,我会考虑eCartoth的解决方案第二,正如你可能只是添加第二线的如果声明:

if (my_validate_user_function($_SESSION['username'],$_SESSION['passhash']) 
    && $_SESSION['deathstamp'] > time()
) {
    // user is logged in again, oh boy!
}
else {
    // send in the death robots
    header('Location: /login.php',true,302);
}

编辑:有一件事你也许想要考虑的是会话的固定和/或会议的劫持。为了防止这种情况,我建议之一(或两者)的两个方案:

  1. 存储用户的IP地址在该届会议
  2. 使用 session_regenerate_id() 之后每一次成功登录尝试。

其他提示

当你说“让我登录了整整一天”,我假设你的意思是只有特定的机器上,是否正确?你可以使用MySQL表记“中的登录时”,或时登录将不再有效,如果他们选择保持自己记录在一整天的时间戳。然后添加一些脚本代码的开始检索从会话瓦尔该用户的ID。比较与存储的“最后一个有效的TS”该用户的当前时间戳记,如果它是过去的那个时候,你知道他们应该被注销,此时您擦拭会议,并强制用户重新登录。这种方法意味着他们不会真正被注销,直到他们尝试做一些过去的这一点,但它似乎给他们。此外,而不是使用MySQL数据库你也可以保存在session变量,最后有效的TS为好。

因此,例如,当用户首次登录与“保持登入状态中选择的所有天”:

$_SESSION['log_me_out_at'] = strtotime(date("Y-m-d ")."23:59:59");

然后,每一个页面被在系统中访问时间:

if( $_SESSION['log_me_out_at'] < time() ){
  unset($_SESSION['user_is_accepted_in']);
}

一个选择可以是设立一个MySQL表,可以节省届会变量和同事与他们的IP地址以及一个到期,但我不知道所有的细节如何,这将是实现的。

最简单(但 建议)的方式来做什么你要找的就是设置一个 $_COOKIE 与用户名和密码的计算机上,你的网站将然后检查时用户的迹象。

为增加安全性, 你会得到更好的服务来节省只是一个饼干作为一个咸MD5hash的用户的数据,以便提供一个潜在的黑客小信息有关的用户的帐户数据。持续时间可以设定时设置cookie; php.net 有合理完整的文件对如何做到这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top