如何在会话版中传递电子邮件

时间:2016-11-19 05:28:40

标签: php session

我理解PHP中$ _SESSION变量的基础知识。我目前有一个站点,可以在整个页面中传递几个值来管理SQL查询。我遇到了一个新问题:

我在用户表中使用电子邮件地址作为主键。我希望将此电子邮件传递到第二页(一旦从服务器收集额外的信息),并在选择链接时动态加载内容。这是我对我的问题的设置:

//从服务器返回的数据: // $ FName = bob,$ LName = rogers,$ Email = bob@rogers.com

$_SESSION['userEmail'] = $Email;
$_SESSION['FirstName'] = $FName;
$_SESSION['LastName'] = $LName;

当我在第二页上加载内容时,我收到了这些值:

echo $_SESSION['userEmail'];  //bob@rogers_com !!!!! THIS is not correct
echo $_SESSION['FirstName'];  //bob
echo $_SESSION['LastName'];   //rogers

电子邮件是从页面上的POST表单收集的。它是表单中唯一的值。在第一页上,我使用end(array_keys($ _ POST))检索电子邮件,这是" $ _ SESSION [' userEmail'] = $ Email"来自。它更具体地说是:: $ _SESSION [' userEmail'] = end(array_keys($ _ POST))::

如何制作电子邮件以便安全地通过请求而不进行转换?

经过进一步的故障排除后,我已经能够确定此转换发生在表单的POST请求中。单击时,表单使用POST方法,该方法在PHP中使用if($ _ SERVER [' REQUEST_METHOD'] ==' POST'){}拦截,其中我捕获了数组值(在我的情况下,只是一封电子邮件) - 电子邮件现在已经转换。

3 个答案:

答案 0 :(得分:0)

我已经搜索并在Xampp localhost中找到了它的工作。这将有所帮助。

/** 
     * Return parsed body in array format (without converting dots and spaces to underscore). 
     * @return array result parsed 
     */     
    function fetch_parsed_body_nodots() 
    { 
        function DANODOT($string) {  
             $bes1= explode("&", $string);  
             foreach ($bes1 as $bes2) { 
                 $bes2= explode("=",$bes2); 
                 list($kilil, $beha) = array_map("urldecode", $bes2); 
                 if(!empty($kilil)){ 
                     $te[$kilil] = $beha;  
                 } 
             } 
             return $te;  
        } 
        return DANODOT($this->result_body); 
    }  

http://forum.directadmin.com/showthread.php?t=48001

答案 1 :(得分:0)

如果你想使用没有变换的文本,如哈希,编码等, 您可以尝试使用替代密钥替代电子邮件主键。

你可以从每一行的auto_increment索引键中获取命中。

在:

select * from users where email = 'johndoe@johndoe.com';

后:

select * from users where id = '1';

这等于:

select * from users where id in (select id from users where email = 'johndoe@johndoe.com');
祝你好运。

答案 2 :(得分:0)

我想出了一个解决方法:

当您收到电子邮件时,可以替换字符'。'具有不同的字符序列;这是通常的电子邮件地址中找不到的东西。我发现 - # - 是一个体面的(通常)。我就这样做了:

$TempFormat = strtr($row['UserEmail'], array('.' => '-#-'))

然后,当我转到我的if($ _ SERVER [' REQUEST_METHOD'] ==' POST'){}函数时,我将字符串转换回它的#s (希望)原始状态通过执行:

$OriginalFormat = strtr(end(array_keys($_POST)), array('-#-' => '.'))