[英]PHP Auto Login after Registration
我上司的要求有一些问题。
我正在使用他创建供使用的http://www.html-form-guide.com/注册表(我附上了链接,以防万一有人想使用或查看它)
因此,我对PHP相当陌生,但是我已经获得了很多疯狂的知识。
这是我的问题-我需要制作此表单,而不是自动登录 。 (此表单具有电子邮件确认系统)
因此,我设法绕过了电子邮件确认并让用户注册,但似乎无法弄清楚如何获得自动登录。
这是我在代码中跟踪到的内容:
function RegisterUser()
{
if(!isset($_POST['submitted']))
{
return false;
}
$formvars = array();
if(!$this->ValidateRegistrationSubmission())
{
return false;
}
$this->CollectRegistrationSubmission($formvars);
if(!$this->SaveToDatabase($formvars))
{
return false;
}
/*if(!$this->SendUserConfirmationEmail($formvars))
{
return false;
}*/
$this->SendAdminIntimationEmail($formvars);
$this->AutoLogin($formvars);// My call
return true;
}
这将输入名称,电子邮件和密码 -将它们放入数组,然后将其发送以进行验证和卫生处理。 我在这里放置了一个调用函数。
之后,我需要手动登录:
function Login()
{
if(empty($_POST['email']))
{
$this->HandleError("Email is empty!");
return false;
}
if(empty($_POST['password']))
{
$this->HandleError("Password is empty!");
return false;
}
$email = trim($_POST['email']);
$password = trim($_POST['password']);
if(!isset($_SESSION)){ session_start(); }
if(!$this->CheckLoginInDB($email,$password))
{
return false;
}
$_SESSION[$this->GetLoginSessionVar()] = $email;
return true;
}
因此,我完成了登录功能的最后一部分,并做了:
function AutoLogin(&$formvars)
{
$email = trim($formvars['email']);
$password = trim($formvars['password']);
if(!isset($_SESSION)){ session_start(); }
if(!$this->CheckLoginInDB($email,$password))
{
return false;
}
$_SESSION[$this->GetLoginSessionVar()] = $email;
return true;
}
我做了回声$ email; echo $ password; 出口; 测试,我可以看到出现了电子邮件和密码。 但是“会话”(我认为)没有启动,或者“ 检查登录名”没有获取数据。
function CheckLogin()
{
if(!isset($_SESSION)){ session_start(); }
$sessionvar = $this->GetLoginSessionVar();
if(empty($_SESSION[$sessionvar]))
{
return false;
}
return true;
}
现在我看到的是一个CheckLoginInDB,它是:
function CheckLoginInDB($email,$password)
{
if(!$this->DBLogin())
{
$this->HandleError("Database login failed!");
return false;
}
$email = $this->SanitizeForSQL($email);
$pwdmd5 = md5($password);
$qry = "Select name, email, pagecode, welcome from $this->tablename where email='$email' and password='$pwdmd5' and confirmcode='y'";
$result = mysql_query($qry,$this->connection);
if(!$result || mysql_num_rows($result) <= 0)
{
$this->HandleError("Error logging in. The email or password does not match");
return false;
}
$row = mysql_fetch_assoc($result);
$_SESSION['name_of_user'] = $row['name'];
$_SESSION['email_of_user'] = $row['email'];
$_SESSION['pagecode_of_user'] = $row['pagecode'];
$_SESSION['welcome_user'] = $row['welcome'];
return true;
}
我可以从中收集到的信息只是一个标准的检查数据库,以查看该用户是否存在并返回结果。
我正在搜索stackoverflow,但似乎看不到我的问题的答案。
我调查过Cookie,但我认为这不是我真正需要的。
我的问题是:
如何让这个坏男孩开始注册课程?
我是否想将AutoLogin(&$ formvars)称为正确的主意?
我使用此AutoLogin函数语法出错了吗?
以防万一,这里是GetLoginSessionVar():
function GetLoginSessionVar()
{
$retvar = md5($this->rand_key);
$retvar = 'usr_'.substr($retvar,0,10);
return $retvar;
}
很遗憾,我无法附加正在处理的文件,但是如果您需要其他代码段,请告诉我,我将立即对其进行编辑!
但是“会话”(我认为)没有启动,或者“检查登录名”没有获取数据。 我是否想将AutoLogin(&$ formvars)称为正确的主意? 我使用此AutoLogin函数语法出错了吗?
语法没什么问题,否则代码甚至不会被编译。 不过,我认为这不是正确的想法。
在尝试解决此问题之前,您需要先了解问题所在。 调试代码。 使用xdebug。 如果已安装并处于活动状态,则可以使用IDE(例如:Visual Studio Code)轻松调试代码。 在怀疑有问题的地方添加断点。
如果您不想使用xdebug,则可以临时添加回显或var_dumps,以检查是否处理了代码的某些区域并检查了一些相关的值。
同时启用所有错误报告并使用记录器。 如果会话在任何输出之后开始,则应该有一些警告。 处理错误并引发异常。
如果您不更改参数$ formvars(只需阅读它),则无需在AutoLogin(&$formvars)
使用&。
您无需为所有用户数据设置会话变量。 使用这些函数之外的用户数据创建一些结构(类,数组等),然后进行更改。 AutoLogin
应该更新该结构,如下所示:
<?php
if (!$_SESSION) {
session_start();
}
$currentUser = array();
function getUserFromID($userID)
{
//TODO implement function
return $user;
}
function AutoLogin()
{
global $currentUser;
if(!empty($_SESSION['userID'])) {
return false;
}
$user = getUserFromID($_SESSION['userID']);
if (empty($user)) {
return false;
}
$currentUser = $user;
return true;
}
可能在调用CheckLoginInDB之前未初始化会话(使用var_dump($_SESSION);
进行检查)。 仅使用$ _SESSION保存用户ID(或电子邮件)并读取它以检索用户数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.