PHP AJAX没有收到SESSION

时间:2017-05-20 13:18:47

标签: javascript php mysql ajax session

我有一个图像上传脚本,用于将文件保存到目录以及mySql链接的副本。

如果我将用户ID设置为“123”,则会在数据库中保存一个新条目。但是,如果我将用户ID设置为$ _SESSION ['unique_user_id'];它不会在数据库中添加新条目,而是继续保存文件。

我在PHP页面上都包含了session_start();,但没有附加的javascript文件。

JS:

function doodleSave() {

    var canvas = document.getElementById("doodle-canvas");
    var canvasData = canvas.toDataURL("image/png");

    $.post('test.php', {data: canvasData}, function (response) {

        var data = JSON.parse(response);

        if (data.filename !== false) {

            alert (data.filename);

        } else {

            alert('unable to upload');

        }
    });
}

PHP:

<?php
session_start();
$unique_user_id = $_SESSION['unique_user_id'];


$randomFolder = md5(uniqid(rand(), true));
$upload_dir = "images/external/doodles/".$randomFolder."/";

if (!file_exists($upload_dir)) {
    mkdir($upload_dir, 0755, true);
}

$url            = md5(uniqid(rand(), true));
$unique_user_id = $_POST['userid'];
$unique_post_id = md5(uniqid(rand(), true));
$timestamp      = time();
$nature         = "doodle";
$imageUrl       = $upload_dir.$url.'.png';

$img = $_POST['data'];
$img = substr($img,strpos($img,",")+1);
$data = base64_decode($img);
$file = $upload_dir . $url . ".png";
$success = file_put_contents($file, $data);

if(!$success) {

    echo json_encode(['filename' => false]);
    exit(); // Prints success and exit the script

} else {

    require_once 'php/connect.php';

    try
    {
        $stmt = $pdo->prepare("INSERT INTO posts (unique_user_id, unique_post_id, nature, image_url, timestamp) VALUE (:unique_user_id, :unique_post_id, :nature, :image_url, :timestamp)");
        $stmt->bindParam(":unique_user_id",$unique_user_id);
        $stmt->bindParam(":unique_post_id",$unique_post_id);
        $stmt->bindParam(":nature",$nature);
        $stmt->bindParam(":image_url",$imageUrl);
        $stmt->bindParam(":timestamp",$timestamp);

        if($stmt->execute())
        {
            echo json_encode(['filename' => "in database"]);
        }
        else
        {
            echo json_encode(['filename' => "not in database"]);
        }
    }
    catch(PDOException $e)
    {
        $return_data = $e->getMessage();
    }
    exit();
}

?>

1 个答案:

答案 0 :(得分:1)

正如我在评论中所述;你覆盖$unique_user_id

你开始宣布:

$unique_user_id = $_SESSION['unique_user_id'];

然后用:

覆盖它
$unique_user_id = $_POST['userid'];

您也可以将POST数组分配给会话数组,并检查它是否设置为空。此条件检查应在每个页面中完成。