Можно ли отправить переменную сеанса php напрямую с ajax? - PullRequest
3 голосов
/ 26 июля 2011

У меня есть это в index.php

    <?php

    include_once '..\connect.php';

    session_start();

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

    } else {    
        header( 'Location: http://localhost/Inventory/index.php' ) ;
        exit;
    }

    ?>

и я делаю ajax-запрос к request.php

    <?php
    //connect to databate and check for errors
    $con = mysql_connect ("localhost","root","");
    if (!$con) {
        die ('Could not connect to database: ' . mysql_error());
    }

    //select database and check selection
    if (!mysql_select_db ("GotA", $con)) {
        die ('Could not select database: ' . mysql_error());
    }

//I have to create this if not it doesnt find the sessions $player_name variable
    $player_name = $_POST['name']; 

    //***Create Player Array**//
    $player_info = "SELECT * from players where id = $player_name";
    $player_info2 = mysql_query($player_info) or die ('Couldnt get players name');
    $player_info3 = mysql_fetch_array($player_info2);

Ну, просто кажется небезопасным извлекать данные из базы данных, используя переменную, отправленную с помощью javascript. Разве нет способа напрямую использовать переменную из index.php (часть сеанса)? или это безопасно просто передать информацию с помощью JavaScript?

Ответы [ 3 ]

3 голосов
/ 26 июля 2011

Почему бы вам просто не получить сеанс снова в request.php?

Вместо:

$player_name = $_POST['name']; 

Использование:

$player_name = $_SESSION['username']; 

Также обязательно используйте session_start() до этого.

2 голосов
/ 26 июля 2011

Из моего предыдущего опыта использования jQuery сессия все еще работает с ajax-запросом, если вы session_start() в верхней части вызываемого скрипта, вы сможете получить доступ к переменным сеанса.

1 голос
/ 26 июля 2011

Ваш AJAX-запрос, хотя и поступает из JavaScript, все же может получить доступ к состоянию сеанса вашего браузера. Вы также можете вернуться к переменной POSTed:

request.php

<?php
session_start();

// Set $dbuser and $dbpass in a secure configuration file
$dbh = new PDO('mysql:host=localhost;dbname=GotA', $dbuser, $dbpass);

if (isset($_SESSION['username']))
    $player_name = $_SESSION['username'];
else
    $player_name = $_POST['name'];

$stmt = $dbh->prepare('SELECT * from players where id = :playername');
$stmt->execute(array(':playername' => $player_name));

$result = $stmt->fetchAll();

Еще одна вещь, наличие асинхронных запросов, учитывающих сеанс, может привести к гонке, если вы выполняете несколько асинхронных запросов. См. эту статью для информации. Пока вы только читаете переменные сеанса, а не записываете их (или явно заканчиваете сеанс), тогда все будет в порядке. (Если у кого-то есть определенный ответ на предыдущее утверждение, пожалуйста, поделитесь в комментариях)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...