【问题标题】:PHP Put variables in Session doesn't workPHP将变量放入会话中不起作用
【发布时间】:2017-09-29 23:00:09
【问题描述】:

我创建了一个 php 页面,它在输入中接收一个编码的 Json 字符串,我必须解密这个字符串并将所有 Json 属性放入会话中。

这个页面是login.php。

为了测试这个页面,我创建了另一个名为 test.php 的页面。 在此页面中,我编写了一个 Json 并将其发送到 login.php。

问题是一切正常(加密、发送、解密),但变量没有保存在会话中。

我尝试直接打开 login.php,我设置了一个固定的加密 json,在这种情况下一切正常。

一些帮助???

登录.php

<html>
<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>TantoSvago</title>

    <script src="../vendors/jquery/jquery-2.1.4.min.js"></script>
    <script src="../js/angular.min.js"></script>
    <script src="../js/ui-bootstrap-tpls-0.12.0.js"></script>
    <script src="../js/angular-google-maps.min.js"></script>
    <script src="https://code.angularjs.org/1.2.28/angular-route.js"></script>
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBze9qLOsDpAWj8938CYJSVsopwrkuWbPA&callback=initMap"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.2/angular-sanitize.js"></script>
    <script src="../js/markerclusterer.js"></script>
    <script src="../js/angular.rangeSlider.js"></script>
    <script src="../js/assets/app.js"></script> 

</head>
<body ng-app="tantoSvagoApp">

<?php
    session_start();
    include 'AES.php';

    $inputText = file_get_contents("php://input");

    //$inputText = "RFk0ZGRtZWQ0NUdrNzNHa3BtYVBCdklEYUlUMk5CUUdGMUF5V2tFSHVWRTRsUEtYZTRiL1FmVGNsY2pKZHdIb2lkOG1ra3BMODdPZUVuUmQzN3Vqd1JpamZGRmloeW1EU09xVFMzbU1Jd1Z0N1dNZzF6MitDYWlHZ3p6VUVyRXgycDYrbHU1Tm0yYVQ4amNuK0hheUNyODErSXZqMzVIQm9NdCtOQU0vVTcyMVBUQ09YQmRZTWZkM1JsbHk0aVJJaFFJdUYrR0JWZzF5WG1HUXl6QnFEa0d0V2ozNWl2YmhheGp6UkpXSVRFZDh4TXM3Q2Vyb2liQWp1UmJEZXNvYnFWNmkzc3ZzWEp4ak92MjB0ZWpjYWJGOFVoMEw0Vk8rNTI2WXhoMTRvYW89";

    $inputText = base64_decode($inputText);

    $inputKey = "466169626f20536f74662052756c657a";

    $blockSize = 256;

    $aes = new AES($inputText, $inputKey, $blockSize);

    $enc = $aes->decrypt();

    $inputJson = json_decode($enc);

    $email = $inputJson->{'email'};
    $firstName = $inputJson->{'firstName'};
    $lastName = $inputJson->{'lastName'};
    $phone = $inputJson->{'phone'};
    $credit = $inputJson->{'credit'};
    $userId = $inputJson->{'userId'};
    $supportPhone = $inputJson->{'supportPhone'};
    $supportMail = $inputJson->{'supportMail'};
    $paymentTypes = $inputJson->{'paymentTypes'};

    if (isset($email)) {
        $_SESSION['email'] = $email;

    }   

    if (isset($firstName)) {
        $_SESSION['firstName'] = $firstName;
    }   

    if (isset($lastName)) {
        $_SESSION['lastName'] = $lastName;
    }   

    if (isset($phone)) {
        $_SESSION['phone'] = $phone;
    }   

    if (isset($credit)) {
        $_SESSION['credit'] = $credit;
    }   

    if (isset($userId)) {
        $_SESSION['userId'] = $userId;
    }   

    if (isset($supportPhone)) {
        $_SESSION['supportPhone'] = $supportPhone;
    }   

    if (isset($supportMail)) {
        $_SESSION['supportMail'] = $supportMail;
    }   

    if (isset($paymentTypes)) {
        $_SESSION['paymentTypes'] = $paymentTypes;
    }else{
        $_SESSION['paymentTypes'] = 'welfare';
    }

    echo 'ok';
?>

<div ng-controller="loginController"></div>

</body>
</html>

test.php

<?php
$inputText = '{"firstName":"Mario","lastName":"Rossi","email":"mario.rossi@gmail.com","phone":"02 342522","userId":2,"credit":30,"paymentTypes":"welfare","supportMail":"supporto@welfarebit.it","supportPhone":"0321 444999"}';

include 'AES.php';

$inputKey = "466169626f20536f74662052756c657a";

$blockSize = 256;

$aes = new AES($inputText, $inputKey, $blockSize);

$enc = $aes->encrypt();

$result = base64_encode($enc);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://welfarebitexperience.tantosvago.it/login/login.php');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $result );                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($result))                                                                       
);  

$result = curl_exec($ch);

curl_close($ch);

?>

<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body onload="test()">
<form id="B2BKv" name="B2BKv" action="http://welfarebitexperience.tantosvago.it/login/login.php" method="POST">
    <input type="hidden" id="MPCookieManager" name="MPCookieManager" value="<?php echo $result; ?>">
</form>
<script language="javascript">
function test() {
    document.B2BKv.submit();
}
</script>
</body>
</html>

【问题讨论】:

    标签: php session


    【解决方案1】:

    尝试将 session_start() 放在每个页面的 html 标记之前

    <?php
        session_start();?>
    
    <html>
    
    <head>
    

    还有这个

    <?php
    session_start();
    $inputText = '{"firstName":"Mario","lastName":"Rossi","email":"mario.rossi@gmail.com","phone":"02 342522","userId":2,"credit":30,"paymentTypes":"welfare","supportMail":"supporto@welfarebit.it","supportPhone":"0321 444999"}';
    
    include 'AES.php';
    
    $inputKey = "466169626f20536f74662052756c657a";
    

    【讨论】:

    • 为什么test.php需要调用session_start()
    • 现在 session_start() 在任何 html 内容之前,也在 test.php 中我不需要会话,但它不起作用
    • 您需要在需要 $_SESSION 的所有页面上调用 session_start()。更好的解决方案是创建一个 php 文件并调用 session_start()。同时,在您需要从会话中添加或读取的页面上返回任何响应之前,必须包含此文件。
    【解决方案2】:

    over here 所述,session_start() 需要返回任何内容之前执行。

    【讨论】:

      【解决方案3】:

      从一开始就让我印象深刻的是 session_start() 被调用的地方。 PHP 手册指出:要使用基于 cookie 的会话,必须在向浏览器输出任何内容之前调用 session_start()。

      【讨论】:

      • 现在 session_start() 在任何 html 内容之前,但没有任何改变
      猜你喜欢
      • 2011-08-15
      • 2013-11-10
      • 2015-09-30
      • 2012-08-17
      • 2014-05-16
      相关资源
      最近更新 更多