好吧,假设我有一个php-script,它有一些选择框,我想把选定的值存储在会话数组中。到目前为止,我使用以下结构将值赋值给会话数组:
$_SESSION[SCRIPT_NAME]['filter_data']
SCRIPT_NAME是一个常量,我将脚本名称放在这里,这是为了让每个php脚本的会话变量都是唯一的。一切都很好,直到那一刻,当用户打开同一脚本在两个或更多的标签,以同时工作。在这种情况下,变量混合,事情就出错了。
您可能有任何想法,如何使每个脚本实例的会话变量绝对唯一?或者有什么建议如何以不同的方式实现功能?
现在,我可以在URL中传递变量,但我不喜欢这个选项。我想使用会话,我希望我的web应用程序的每个脚本在整个用户登录会话期间记住用户的选择
发布于 2012-12-31 02:35:59
"...how使每个脚本实例的会话变量绝对唯一?“
基本上答案是,“你不能。”这是因为浏览器的所有实例(窗口和选项卡)共享相同的cookie jar。因此,这两个实例返回相同的cookie,并且它们连接到相同的会话。这在“现实生活”中很少出现问题,但正如您现在所看到的,它会让开发人员抓狂;-)
发布于 2017-12-08 02:27:31
<?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'];
?>
和文件连接
<?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);
}
}
?>
发布于 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()
// 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();
...
这样一来,两个脚本都将拥有自己的会话“域”,并且彼此隔离。这样的话
https://stackoverflow.com/questions/14093372
复制相似问题