PHP使用session_name在会话之间切换

时间:2016-06-07 17:21:34

标签: php session

所以我试图在同一个脚本中编写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,它不应该在那里。

我是否滥用了会话?

3 个答案:

答案 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名称,如图所示。 enter image description here

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

我希望这可以帮助你们中的一些人。