[英]Session no longer exists when resend WWW Unity3d and PHP
我创建了一个系统,通过Unity3D发送用户ID,并在服务器上创建会话并将会话发送回客户端(在Unity3D上),所以一切正常! 但是当我从Unity3D发送回服务器时,会话就消失了! 我已经检查过浏览器并且它有效,它在Unity3D上不起作用! 有谁知道它是什么?
Unity3d上的C#
void Start () {
WWW w = new WWW (url+ "?id=" + userId);
StartCoroutine (SessionWWW (w));
}
private IEnumerator SessionWWW (WWW _w){
yield return _w;
PlayerPrefs.SetString("cookie", _w.text);
Debug.Log (PlayerPrefs.GetString("cookie"));
Debug.Log (_w.text);
}
void Update(){
if (Input.GetKeyDown (KeyCode.P)) {
string session= PlayerPrefs.GetString("cookie");
WWW w = new WWW (url "?sessionid=" + session);
StartCoroutine (GetSessionWWW (w));
}
}
private IEnumerator GetSessionWWW (WWW _w){
yield return _w;
if (_w.text == "ok") {
Debug.Log ("received!");
} else {
Debug.Log (_w.text);
}
}
PHP脚本:
<?PHP
session_start();
if(isset($_GET['id'])){
$id = $_GET['id'];
$_SESSION['session'] = $id;
echo $_SESSION['session'];
}
if(isset($_GET['sessionid'])){
if(isset($_SESSION['session'])){
echo $_SESSION['session'];
}
}
?>
如果您想在PHP中设置当前会话的会话ID,请使用session_id($ id)函数BEFORE session_start。 https://www.php.net/manual/en/function.session-id.php
<?php
//do you need both of these?
if(isset($_GET['id'])){
$id = $_GET['id'];
session_id($id);
}
if(isset($_GET['sessionid'])){
$sessionid = $_GET['sessionid'];
session_id($sessionid);
}
session_start();
print_r($_SESSION)
?>
session_id ([ string $id ] ) : string
如果指定了id,它将替换当前的会话ID。 为此,需要在session_start()之前调用session_id()。 根据会话处理程序,会话ID中不允许所有字符。 例如,文件会话处理程序仅允许az AZ 0-9,(逗号)和 - (减号)范围内的字符
您可能还需要在设置会话ID之前进行验证,以防止代码出错,如果这是在互联网上,其他人也可以找到它。
(来自上面的链接)
function session_valid_id($session_id)
{
return preg_match('/^[-,a-zA-Z0-9]{1,128}$/', $session_id) > 0;
}
$id = $_GET['id'];
if (session_valid_id($id)) {
session_id($id);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.