我有一个典型的登录(用户名,密码),还希望包括一个“保存我的详细信息”复选框。登录表单将其值发布到login_script.php,如果登录成功,则将用户重定向到网站的主页。

我要使用此方法来保存登录详细信息

//Remember Me Function

if(isset($_POST['remember_me'])){

    // Set a cookie that expires in 24 hours
    setcookie("username",$username, time()+3600*24);
    setcookie("password",$password, time()+3600*24);

}

现在据我了解, setcookie("username",$username, time()+3600*24); 必须在执行任何其他代码之前在PHP页面的顶部设置。

我的问题是,除非用户成功登录,否则我不想设置cookie。但是,由于登录测试后在脚本中间调用了设置的cookie函数,因此它将行不通。

有任何想法吗?干杯。

有帮助吗?

解决方案

首先: 不要将密码保存在cookie中! 在安全方面,这是一个非常糟糕的主意。

至于您的问题:无法解决问题,在设置cookie之前,您根本不需要输出。有两种方法可以实现这一目标:

解决方案1:登录页面总是重定向

让您的登录请求转到设置cookie的脚本(如果登录成功),然后 总是 将用户重定向到另一页(例如欢迎屏幕,或者如果不成功,则返回登录页面)。登录脚本不会发出任何输出,因此您可以在重定向之前设置cookie。

解决方案2:输出缓冲

开始 输出缓冲 在脚本的开头。检查成功登录后,设置cookie 第一的 然后停止使用类似的输出缓冲 ob_end_flush.

我个人认为解决方案#1的功能更加优雅和优越。

其他提示

将密码存储在用户可以访问的地方(在客户端)中是一种非常糟糕的做法。更糟糕的是,您在存储密码时没有哈希或加密密码(客户端可以看到密码!)!

良好的安全策略永远不会让任何人看到实际密码。除非代码正在使用它。

您可以做到这一点:

  • 将密码存储在会话中
  • 将会话扩展到更长的时间

或者你可以

  • 哈希并加密密码
  • 将登录信息存储到服务器上的文件
  • 给文件一个唯一的名称
  • 将名称存储到cookie
  • 每当您收到具有正确文件名的cookie时,请查找文件并检索登录信息。

但是我总是建议前者,因为它更容易实施,并且会话处理是由PHP完成的(除非您要覆盖会话处理)

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