PHP 打开不需要的第二个会话



要求:使用QRBOT应用程序扫描手机上的条形码,并将扫描的号码提供给网站。 问题:我打开了一个会话 (1(,从这里我打开应用程序(请参阅 ScanBardcode.php(,我扫描并且应用程序返回到包含所需参数的回调 URL。但是,我确实希望它重用它的会话,它会创建一个新的会话(2(。有人可以帮助我吗?它确实有两个会话处于活动状态,并且两个页面都继续使用自己的会话。我只能在我的手机上测试它,我每次都检查它正在使用(启动-1 和回调-2 是同一个浏览器( 我已经尝试过了: 1. 在回调 URL 中传递会话 ID(二维码不允许参数( 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>"
?>

扫描条形码回拨.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.
?>

塞西公司.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中添加会话ID作为参数时添加屏幕截图: 在此处输入图像描述

更新到扫描条形码.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()进行整个检查。PHPsession_start()文档 说:

session_start(( 根据通过 GET 或 POST 请求传递或通过 cookie 传递的会话标识符创建会话或恢复当前会话

这也是我的经验。 每次我使用session_start()我只是把它放在每个文件的顶部(或者像你一样包含它(

在 URL 中传递会话 ID 时,需要在调用session_start()之前使用该参数设置会话 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 中获取会话 ID 并在启动start_session之前使用 session_id 函数应用该 ID(另请参阅(。

下面清理的代码;希望有人也能使用它。

扫描条形码.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>"
?>

扫描条形码回拨.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 不变

相关内容

最新更新