我创建了一个系统,该系统通过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_start之前使用session_id($ id)函数。
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_id()需要先被调用
  为此,使用session_start()。根据会话处理程序,
  会话ID内不允许所有字符。例如,
  文件会话处理程序仅允许a-z A-Z 0-9范围内的字符,
  (逗号)和-(减号)


您可能还需要在设置会话ID之前进行验证,以防止代码出错,并且如果该代码在Internet上,其他人也可以找到它。

(从上面的链接)

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);
}

关于php - 重新发送WWW Unity3d和PHP时, session 不再存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56316573/

10-11 02:55
查看更多