1

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

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

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

`$message = $Url。"php session_start(); '$_SESSION[id]' = " . $row['user_id'] 。" ?>";
...
$mail->MsgHTML($message);
$邮件->发送();`

然后在注册页面

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

4

2 回答 2

2

您不能在变量内附加函数...而只是创建新表来存储验证码,

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();
}
于 2012-07-26T03:22:16.037 回答
0

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

话虽如此,如果我把你的问题弄错了,请纠正我。您发送带有 ID 的邮件,一旦有人打开邮件,您希望能够获取该 ID?我会推荐一个正则表达式或一个简单的字符串 substr ( string $string , int $start [, int $length ] ) 从邮件中获取它。

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

邮件示例:
“Hello12ID:5 我的名字是...”

前段时间我确实处理过这样的字符串,但它就在这里。

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

它的作用是返回“ID”和空格之间的内容。在我的情况下是 5。所以在这种情况下 $id = 5。然后你只需将这 5 个保存到一个会话中,这也可以一次完成,但最好检查一下,以便它在之前抓住一些好的东西。

希望是你的意思。

于 2012-07-26T03:26:57.883 回答