首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让每个php-script实例的会话变量都是唯一的?

如何让每个php-script实例的会话变量都是唯一的?
EN

Stack Overflow用户
提问于 2012-12-31 02:28:32
回答 5查看 2.1K关注 0票数 4

好吧,假设我有一个php-script,它有一些选择框,我想把选定的值存储在会话数组中。到目前为止,我使用以下结构将值赋值给会话数组:

代码语言:javascript
复制
$_SESSION[SCRIPT_NAME]['filter_data']

SCRIPT_NAME是一个常量,我将脚本名称放在这里,这是为了让每个php脚本的会话变量都是唯一的。一切都很好,直到那一刻,当用户打开同一脚本在两个或更多的标签,以同时工作。在这种情况下,变量混合,事情就出错了。

您可能有任何想法,如何使每个脚本实例的会话变量绝对唯一?或者有什么建议如何以不同的方式实现功能?

现在,我可以在URL中传递变量,但我不喜欢这个选项。我想使用会话,我希望我的web应用程序的每个脚本在整个用户登录会话期间记住用户的选择

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-31 02:35:59

"...how使每个脚本实例的会话变量绝对唯一?“

基本上答案是,“你不能。”这是因为浏览器的所有实例(窗口和选项卡)共享相同的cookie jar。因此,这两个实例返回相同的cookie,并且它们连接到相同的会话。这在“现实生活”中很少出现问题,但正如您现在所看到的,它会让开发人员抓狂;-)

票数 2
EN

Stack Overflow用户

发布于 2017-12-08 02:27:31

代码语言:javascript
复制
 <?php
        //Start session
        session_start();
        //Check whether the session variable SESS_MEMBER_ID is present or not
        if (!isset($_SESSION['id']) || ($_SESSION['id'] == '')) {
            header("location: index.php");
            exit();
        }

        $session_id=$_SESSION['id'];
        ?>

和文件连接

代码语言:javascript
复制
 <?php

 class DbConnector {

 var $theQuery;
 var $link;

 function DbConnector(){

    // Get the main settings from the array we just loaded
    $host = 'localhost';
    $db = '';
    $user = 'root';
    $pass = '';

    // Connect to the database
    $this->link = mysql_connect($host, $user, $pass);
    mysql_select_db($db);
    register_shutdown_function(array(&$this, 'close'));

}

   //*** Function: query, Purpose: Execute a database query ***
function query($query) {

    $this->theQuery = $query;
    return mysql_query($query, $this->link);

}

//*** Function: fetchArray, Purpose: Get array of query results ***
function fetchArray($result) {

    return mysql_fetch_array($result);

}

//*** Function: close, Purpose: Close the connection ***
function close() {

    mysql_close($this->link);

}

}

?>
票数 0
EN

Stack Overflow用户

发布于 2019-05-21 19:38:03

您可以使用session_name($unique_script_instance_name) - https://www.php.net/manual/en/function.session-name.php来完成此操作

您所需要做的就是为脚本的每个实例定义一个唯一的名称,这样,例如,如果您在共享服务器上有两个不同的应用程序安装,您可以为一个提供名称A,为第二个提供名称B,您可以将该值存储为$unique_script_instance_name

然后,在调用session_start()之前,需要调用session_name()

代码语言:javascript
复制
// One script
$unique_script_instance_name "A";
session_name($unique_script_instance_name);
session_start();

...

// Second script
$unique_script_instance_name "B";
session_name($unique_script_instance_name);
session_start();

...

这样一来,两个脚本都将拥有自己的会话“域”,并且彼此隔离。这样的话

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14093372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档