在电子邮件中嵌入PHP以启动会话并存储变量


Embed PHP in an email to start a session and store variable

当用户打开我发送给他们的电子邮件时,我正在尝试创建一个会话变量。一切都是用两个.php文件完成的。(mailer.php和register.php)

mailer.php获取用户的所有信息,并向他们发送一封带有register.php页面url的电子邮件。

我想从mailer.php中获取一个会话变量(User_id)到register.php。我在从mailer.php发送的电子邮件中放入了以下内容。我怀疑它是否有效,但它说明了我需要什么。

`$message=$Url。"php session_start();'$_session[id]'="$行['user_id']。"?>";。。。$mail->MsgHTML($message);$mail->Send()`

然后在注册页面

`$userID=$_SESSION['id']`

不能在变量内部附加函数。。。相反,只需创建新的表来存储验证码,

function genRandomString() {
    $length = 10;
    $characters = ’0123456789abcdefghijklmnopqrstuvwxyz’;
    $string = ”;    
    for ($p = 0; $p < $length; $p++) {
        $string .= $characters[mt_rand(0, strlen($characters))];
    }
    return $string;
}
$code = genRandomString();
$message = "http://localhost/start_session.php?verify=$code";
$mail->MsgHTML($message);
if($mail->Send()){
    echo 'Message Sent';
    // Then execute a query to insert the generated code to your database
}

当用户打开他的电子邮件并点击链接时,他会进入验证页面。

Match the verification code in the database using get variable and if found, start the session otherwise no session 
$code = mysql_real_escape_string($_GET['verify'];
$query = mysql_query("SELECT * FROM verifications WHERE verification_code=$code");
$rows = mysql_num_rows($query);
if($rows > 0){
    session_start();
    session_regenerate_id();
}

首先,php执行一次代码,也就是加载页面的时候。

话虽如此,如果我答错了你的问题,请纠正我。你发送的邮件带有一个ID,你希望在有人打开邮件后能够获取该ID?我建议使用regexp或简单的字符串子字符串(string$string,int$start[,int$length])从邮件中获取它。

如果你收到的邮件是原始文本(在正常情况下你会这样做),那么就抓住它

示例邮件:
"Hello12ID:5我的名字是…"

不久前,我确实处理过这样的字符串,但现在它开始了。

$id=substr($email,strpos($email','id:')、strpos
if(is_numeric($id))echo"失败:"$id。"不是数字";出口

它的作用是返回"ID"和后面的空格之间的值。在我的情况下是5。所以在这种情况下$id=5。然后你只需将5保存到一个会话中,这也可以同时进行,但最好进行检查,这样它就可以在之前抓住一些好的东西。

希望这就是你的意思。