PHP实现用户注册后自动登录与页面重定向教程

说白了,PHP实现注册后自动登录的核心步骤有3 个:初始化session、注册成功后使用session_regenerate_id(true)生成并分配新的session ID、最后重定向。
但不要以为这很容易,事实确实如此。
您需要注意一些重要的要点。

首先使用session_start()来初始化会话。
这是必要的。
去年,当我们运行该项目时,我们报告了一个错误,因为我们忘记了这一点。
注册逻辑中,用户数据入库后直接检索$pdo->lastInsertId(),然后执行session_regenerate_id(true)。
这可以防止会话修复攻击。
说实话,当时很混乱。
起初我认为用 session_id() 替换它就足够了,但后来我发现这是完全错误的。
我不得不使用 true 参数来完全销毁旧会话。
最后,将用户ID、名称和角色放入$_SESSION中,然后跳转到header('Location:dashboard.php')。

安全性必须提高。
默认是使用password_hash()来处理密码。
不要总是使用 md5 去年我们项目中爆发的彩虹表攻击就是一个教训。
使用password_verify()来验证密码。
他们必须成对出现。
在会话安全方面,session_regenerate_id(true)是重中之重。
还有一点是会话变量设计应该最小化。
我只保留了id和role,其他乱七八糟的删掉了。
许多人不注意这一点。
还有另一个关键细节。
您可以添加 IP 绑定,例如 $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']。
虽然不完全可靠,但它可以提供额外的保护层。

说到激活过程,我们先来说说最重要的一点。
注册时,生成一个激活码,如 bin2 hex(random_bytes(1 6 )) 并将其保存在数据库中,然后发送电子邮件。
在activate.php页面上,如果找到代码和非活动用户,activated_at将被更新,然后他们将自动登录。
我们去年测试的时候发现激活邮件没有发送。
后来我们发现电子邮件提供商被屏蔽了,所以我们很快切换到SendGrid来获取解决方案。

最后提醒:重定向无效。
当看到header()跳转失败时,首先检查代码之前是否有输出,即使有空格。
如果仍然不起作用,请使用 ob_start() 启用输出缓冲并运行 header()。
这个细节太容易被忽视了,说实话,这很令人沮丧。

我认为值得尝试的是在注册成功后直接显示用户信息,例如“欢迎回来,[name]”,这样用户体验会好很多。

动态html页面。用html。php。mysql实现注册和登录的一些问题。

回想起以前做网站注册的时候,真是头疼。
今年是2 01 9 年,我们公司即将推出新平台,注册和登录是基本技能。
我当时就是按照你说的逻辑去做的。

首先,对于注册页面的JS脚本,我写了很多验证功能,比如检查用户名是否被捕获、密码是否符合强度要求、电子邮件格式是否正确等。
每当用户输入信息时,我都会弹出一个提示框,告诉他有问题,需要更改。
我记得有一次,用户输入了很长的用户名,弹出的提示框就占满了我的电脑屏幕,哈哈。

然后,在用户提交注册信息后,我编写了一个PHP文件来获取这些数据。
在这个文件中,我使用PHP的filter_var函数来过滤用户输入的信息,以确保它们符合要求。
如果数据没有问题,我将继续编写代码,连接到数据库,并向其中插入用户信息。

为了登录,我编写了一条 SQL 语句来查询数据库以检查用户名和密码是否匹配。
有一次,一个用户输入了3 次错误的密码,数据库就给我抓狂了,哈哈。
如果用户名不存在,我就会进入注册页面,提示“兄弟,您的账号不存在,请赶紧注册”。
如果如果密码错误,则直接在登录页面提示“用户名或密码错误,请重新输入”。

不过说起来,这个功能的实现还是有一些坎坷的。
例如,有一次,数据库连接出现问题。
用户提交了注册信息,但数据未保存。
结果,用户以为注册成功,但后来再次注册,却发现账号被盗用。
我当时真的很担心。
经过一番排查,发现是数据库连接有问题。

总之,虽然流程有点繁琐,但是逻辑还是挺清晰的。
代码量其实不是很多,但是细节上要仔细处理。
现在回想起来,那段时间我还是学到了很多东西。