PHP открывает второй сеанс нежелательно - PullRequest
0 голосов
/ 14 октября 2019

Требование: используйте QRBOT-приложение для сканирования штрих-кода на мобильном телефоне и укажите номер, отсканированный на сайте. Проблема: у меня открыт сеанс (1), отсюда я открываю приложение (см. ScanBardcode.php), я сканирую, и приложение возвращает URL-адрес обратного вызова, включая необходимые параметры. Однако я ожидаю, что он повторно использует свой сеанс, он создает новый (2). Кто-нибудь может мне помочь? У него есть обе активные сессии, и обе страницы продолжают использовать свою собственную сессию. Я могу проверить его только на своем мобильном телефоне, который я проверял, использует каждый раз (initiate-1 и callback-2 один и тот же браузер). То, что я уже пробовал: 1. Передать sessionID в URL-адресе обратного вызова (QRBOT неразрешить параметры) 2. Установите для Session.auto_start значение 1

ScanBarcode.php

<?php
   include_once('../../config.inc.php'); //contains DB connection details and other settings
   include_once($fullurl . '../../admin/includes/sessie.inc.php'); //generates session
    echo "SessionID=". session_id() . "!";
    $_SESSION['BarCode'] = "VoorraadTellen";
    echo "Wat gaan we doen? " . $_SESSION['BarCode'] . "</br></br>";
  //URL to open qrbot.
    echo "<a href=https://qrbot.net/x-callback-url/scan?x-success=https%3A%2F%2Filonashairstyling.nl/2016UAT/module/Ilonas_admin/ScanBarcodeCallBack.php?".">click</a>"
?>

ScanBarcodeCallBack.php

    <?php
     $source = $_GET['x-source'];
     $content = $_GET['content'];
     $format = $_GET['format'];
     include_once('../../config.inc.php');
     include_once($fullurl . '../../admin/includes/sessie.inc.php'); 
     echo "Wat gaan we doen? " . $_SESSION['BarCode'] . "</br></br>";
     echo "SessionID=". session_id() . "!";
     echo $source . $content . $format;

  // HERE I WRITE TO THE DB.
    ?>

sessie.inc.php

<?php
$a = session_id();
if(empty($a)) 
    {
        session_start();
    }

    if(isset($_SESSION['sgebruiker'])) 
    {
        $now = time();
        if($now - $_SESSION['stijd'] > $_SESSION['maxidle']) 
        {
            $_SESSION = array();
            session_destroy();
        } 
        else 
        {
            $_SESSION['stijd'] = $now;
        }
    } 
    elseif(isset($_COOKIE['login_cookie'])) 
        {
            //Check against db and set cookie.
        }
?>

Добавление снимка экрана, когда я добавляю sessionId в URL в качестве параметра: введите описание изображения здесь

Обновление до ScanBarcode.php

`echo "<a href=https://qrbot.net/x-callback-url/scan?x-success=https%3A%2F%2Filonashairstyling.nl/2016UAT/module/Ilonas_admin`/ScanBarcodeCallBack.php?s=".htmlspecialchars(session_id()).">click</a>"

Ответы [ 3 ]

0 голосов
/ 14 октября 2019

Когда вы передаете идентификатор сеанса в URL, вам нужно использовать параметр для установки идентификатора сеанса перед вызовом session_start(). Измените sessie.inc.php на:

<?php
if (isset($_GET['s'])) {
    session_id($_GET['s']);
}
session_start();

if(isset($_SESSION['sgebruiker'])) 
{
    $now = time();
    if($now - $_SESSION['stijd'] > $_SESSION['maxidle']) 
    {
        $_SESSION = array();
        session_destroy();
    } 
    else 
    {
        $_SESSION['stijd'] = $now;
    }
} 
elseif(isset($_COOKIE['login_cookie'])) 
{
    //Check against db and set cookie.
}
?>
0 голосов
/ 14 октября 2019

Работая с @Tsai и @Barmar, мы нашли решение. Мы исправили это следующим образом: - Кодирование URL-адреса с помощью функции urlencode. - Извлеките sessionID из URL-адреса и примените его с помощью функции session_id перед запуском start_session ( см. Также ).

Очистиликод вверху ниже;надеюсь, кто-то сможет использовать его также.

ScanBarcode.php

<?php
   include_once('../../config.inc.php'); //contains DB connection details and other settings
   include_once($fullurl . '../../admin/includes/sessie.inc.php'); //generates session
    echo "SessionID=". session_id();
  //URL to open qrbot.
$CallbackUrl = "http://ilonashairstyling.nl/2016UAT/module/Ilonas_admin/ScanBarcodeCallBack.php?s=" . htmlspecialchars(session_id());
echo "<a href=https://qrbot.net/x-callback-url/scan?x-success=". urlencode($CallbackUrl) . ">click</a>"
?>

ScanBarcodeCallBack.php

<?php
  $source = $_GET['x-source'];
  $content = $_GET['content'];
  $format = $_GET['format'];

  include_once('../../config.inc.php');

  ini_set("session.use_cookies",0);
  ini_set("session.use_trans_sid",1);
  session_id($_GET['s']);
  //print_r($_SESSION); //You can test it with this code
  //print(session_id()); //You can test it with this code

  ini_set("session.use_cookies",1);
  ini_set("session.use_trans_sid",0);

  include_once($fullurl . '../../admin/includes/sessie.inc.php'); 

  echo "Wat gaan we doen? " . $_SESSION['BarCode'] . "</br></br>";
  echo "SessionID=". session_id() . "!";
  echo $source . $content . $format;

  // HERE I WRITE TO THE DB.
?>

sessie.inc.php без изменений

0 голосов
/ 14 октября 2019

насколько я знаю, вам не нужен полный чек с session_id(). Документация PHP для session_start() гласит:

session_start () создает сеанс или возобновляет текущий на основе идентификатора сеанса, переданного через запрос GET или POST, или переданного черезпеченье.

это тоже мой опыт. каждый раз, когда я использовал session_start(), я просто помещал его в начало каждого файла (или включал его, как вы сделали)

...