![](/img/trans.png)
[英]Bringing information to a 2nd php file, but SESSION isn't the answer
[英]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.