簡體   English   中英

PHP 打開第二個 session 不需要

[英]PHP opens 2nd session unwanted

要求:使用QRBOT-app掃描手機上的條碼,並將掃描的號碼提供給網站。 問題:我打開了一個 session (1),從這里我打開應用程序(請參閱 ScanBardcode.php),我掃描並且應用程序返回到包含所需參數的回調 URL。 但是我確實希望它會重新使用它的 session,它會創建一個新的 (2)。 有人能幫我嗎? 它確實有兩個會話都處於活動狀態,並且兩個頁面都繼續使用它自己的 session。 我只能在我的手機上測試它,我檢查的是每次都使用(initial-1和callback-2同一個瀏覽器)我已經嘗試過:1.在回調URL中傳遞sessionID(QRBOT沒有允許參數) 2. 將 Session.auto_start 設置為 1

掃描條碼.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.
        }
?>

當我在 URL 中添加 sessionId 作為參數時添加屏幕截圖:在此處輸入圖像描述

更新到 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>"

據我所知,您不需要使用session_id()進行全面檢查。 PHP session_start()的文檔說:

session_start() 創建一個 session或根據通過 GET 或 POST 請求或通過 cookie 傳遞的 session 標識符恢復當前標識符。

這也是我的經驗。 每次我使用session_start()我只是把它放在每個文件的頂部(或者像你一樣包含它)

當你在URL中傳遞session ID時,需要在調用session_start()之前使用參數設置session ID。 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.
}
?>

與@Tsai 和@Barmar 合作,我們找到了解決方案。 我們通過以下方式修復它: - 使用 urlencode-function 對 URL 進行編碼 - 從 URL 獲取 sessionID 並在啟動 start_session 之前使用 session_id-function 應用它(另請參閱)。

下面的清理代碼; 希望有人也可以使用它。

掃描條碼.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 不變

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM