我有一个典型的登录名(用户名,密码),还想包含一个“保存我的详细信息”复选框。登录表单将其值发布到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);
}
根据我的理解,在执行任何其他代码之前,必须在PHP页面的顶部设置setcookie("username",$username, time()+3600*24);
。
我的问题是我不想设置cookie,除非用户已成功登录。但是由于在登录测试后在脚本中间调用了set cookie函数,它将无法工作。
有什么想法吗? 欢呼声。
答案 0 :(得分:8)
首先:不要在密码中保存密码!这是一个非常糟糕的安全概念。
至于你的问题:没有办法绕过它,在设置你的cookie之前你根本就没有输出。有两种方法可以实现这一目标:
解决方案1:登录页面始终重定向
让您的登录请求转到设置cookie的脚本(如果登录成功),然后始终将用户重定向到另一个页面(例如欢迎屏幕,或返回登录页面)如果不成功)。登录脚本不会发出任何输出,因此您可以在重定向之前设置cookie。
解决方案2:输出缓冲
在脚本开头的output buffering处开始。检查成功登录后,首先设置cookie ,然后使用ob_end_flush
之类的内容停止输出缓冲。
我个人认为解决方案#1在功能上更优雅,更优越。
答案 1 :(得分:3)
在用户可以访问的某个地方(在客户端)存储密码是一种非常糟糕的做法。更糟糕的是,您在存储密码时没有对密码进行哈希或加密(客户端可以看到密码!)
良好的安全策略绝不允许任何人查看实际密码。除非代码正在使用它。
您可以这样做:
或者你可以改为
但我总是推荐前者,因为它更容易实现,会话处理由PHP完成(除非你重写会话处理)