所以我试图在同一个脚本中编写2个php会话,但似乎它不能像我想象的那样工作。
代码:
// Start our first session with the name 's1'
session_name('s1');
session_start();
$_SESSION['foo'] = 'Foo';
session_write_close();
// Start our second session with the name 's2'
session_name('s2');
session_start();
$_SESSION['foo'] = 'Bar';
session_write_close();
// We now open our first session and print its value
session_name('s1');
session_start();
print_r($_SESSION['foo']);
由于我们打开了会话Bar
Foo
是应该打印s1
的正确方法是什么(我认为使用session_id不是一种安全的方法)使其打印Foo
?
另外,如果你在会话$_SESSION['color'] = 'red';
中写了s2
之类的内容,然后继续打印整个s1
会话,你会在那里看到密钥color
,它不应该在那里。
我是否滥用了会话?
答案 0 :(得分:1)
如果使用session_id而不是session_name
,则可以解决您的问题// Start our first session with the name 's1'
session_name('s1');
session_start();
$_SESSION['foo'] = 'Foo';
session_write_close();
// Start our second session with the name 's2'
session_name('s2');
//session_start();
$_SESSION['foo'] = 'Bar';
session_write_close();
// We now open our first session and print its value
session_name('s1');
session_start();
print_r($_SESSION['foo']);
将此等式更改为
<?php
// Start our first session with the name 's1'
session_id('s1');
session_start();
$_SESSION['foo'] = 'Foo';
session_write_close();
// Start our second session with the name 's2'
session_id('s2');
session_start();
$_SESSION['foo'] = 'Bar';
session_write_close();
// We now open our first session and print its value
session_id('s1');
session_start();
print_r($_SESSION['foo']);
?>
Session_id是会话的标识符,因此对于不同的会话可以是不同的,但session_name只是同一会话的不同名称。
答案 1 :(得分:1)
session_name()
设置发送到浏览器的cookie名称,如图所示。
php使用会话的标识符,其中图片中的cookie值。 可以通过@Amit Ray
指示的session_id
进行更改
这是另一个棘手的解决方案,您可以动态更改session.path
..您将在两个不同的文件夹中拥有2个具有相同标识符的文件
这是代码
<?php
session_save_path('/tmp/phpsess1/');
session_start();
$_SESSION['foo'] = 'Foo';
session_write_close();
// Start our second session with the name 's2'
session_save_path('/tmp/phpsess2');
session_start();
$_SESSION['foo'] = 'Bar';
session_write_close();
//
// // We now open our first session and print its value
session_save_path('/tmp/phpsess1');
session_start();
print_r($_SESSION);
这会打印Array ( [foo] => Foo )
答案 2 :(得分:0)
使用会话名称(cookie名称)在会话之间切换有一种方法。我正在开发一个需要此功能的Web应用程序,并提出了以下代码。
/* set the first session name */
session_name($ses->one->name);
/* check if the first session cookie is set and use the value as the id */
if(isset($_COOKIE[$ses->one->name])) session_id($_COOKIE[$ses->one->name]);
/* start the session */
session_start();
/* store data in this session */
$_SESSION['name'] = $ses->one->name;
/* get the session id */
$ses->one->id = session_id();
/* close the session */
session_write_close();
/* repeat the same process for the second session */
session_name($ses->two->name);
/* if you loading the sessions as the same time you will need to assign a different session id to the second session */
if(isset($_COOKIE[$ses->two->name])) session_id($_COOKIE[$ses->two->name]);
else session_id($ses->one->id . '_1');
session_start();
$_SESSION['name'] = $ses->two->name;
$ses->two->id = session_id();
session_write_close();
现在可以检索存储的数据了。
/* set the session name */
session_name($ses->one->name);
/* set the session id */
session_id($ses->one->id);
/* start the session */
session_start();
/* echo out the data */
echo 'session 1 : ' . $_SESSION['name'] . '<br>';
/* close the session */
session_write_close();
/* repeat the same process for the second session */
session_name($ses->two->name);
session_id($ses->two->id);
session_start();
echo 'session 2 : ' . $_SESSION['name'];
session_write_close();
我希望这可以帮助你们中的一些人。