(Spotify) 如何停止跨浏览器会话共享?
(Spotify) how to stop cross browser session sharing?
我正在使用 spotify api,出于某种原因,他们的会话 class 块将自己的数据存储在 $_SESSION 中。作为解决方法,我写了 class 'SystemHelper':
命名空间应用;
class SystemHelper
{
/**
* if session_id is empty string, then session_id has not been initialized
* then set session_id named 'session1'
* start session needs 2 parameters, name and value
* always close session after writing
*
* @param string $name any given name
* @param [type] $value any given value
*
*/
public static function customSessionStore($name, $value)
{
if (session_id() == '') {
session_id('session1');
}
session_start();
$_SESSION[$name] = $value;
session_write_close();
}
现在可以将数据存储在 $_SESSION 中,但问题是只要我使用我的帐户登录(我自己的登录表单,而不是 spotfiy 帐户),其他人都会登录,无论是哪个浏览器、ip等...
不知道怎么解决。 session_id 不应该生成一个随机 ID 吗?有人可以帮忙吗?
遗漏
if (session_id() == '') {
session_id('session1');
}
没有解决,因为我还需要读取和删除存储在会话中的数据。所以,另外我有这个解决方法:
public static function customSessionRead($name)
{
if (session_id() == '') {
session_id('session1');
}
session_start();
session_write_close();
return $_SESSION[$name];
}
和...
public static function customSessionDestroy()
{
session_start();
session_destroy();
}
如果我做对了..您的所有用户都得到相同的 session_id()。
所以他们在技术上共享一个会话。据我所知,如果您开始会话,session_id() 将自动生成。所以你不需要自己设置session_id()。
因此您的代码应如下所示:
class SystemHelper
{
/**
* if session_id is empty string, then session_id has not been initialized
* then set session_id named 'session1'
* start session needs 2 parameters, name and value
* always close session after writing
*
* @param string $name any given name
* @param [type] $value any given value
*
*/
public static function customSessionStore($name, $value)
{
session_start();
$_SESSION[$name] = $value;
session_write_close();
}
}
解决了,其实很简单。先说问题:
如果这样写:
session_id('session1');
在两者中,customStore 和 customRead 仅表示恢复会话。当然你总是会得到相同的数据,无论哪个浏览器,ip,...这就是恢复会话的意义。
解决了什么:
session_create_id($name);
所以,又满了:
public static function customSessionStore($name, $value)
{
// if (session_id() == '') {
// session_id('session1');
// }
session_create_id($name);
session_start();
$_SESSION[$name] = $value;
session_write_close();
}
并且,
public static function customSessionRead($name)
{
// if (session_id() == '') {
// session_id('session1');
// }
session_start();
session_write_close();
return $_SESSION[$name];
}
我正在使用 spotify api,出于某种原因,他们的会话 class 块将自己的数据存储在 $_SESSION 中。作为解决方法,我写了 class 'SystemHelper':
命名空间应用;
class SystemHelper
{
/**
* if session_id is empty string, then session_id has not been initialized
* then set session_id named 'session1'
* start session needs 2 parameters, name and value
* always close session after writing
*
* @param string $name any given name
* @param [type] $value any given value
*
*/
public static function customSessionStore($name, $value)
{
if (session_id() == '') {
session_id('session1');
}
session_start();
$_SESSION[$name] = $value;
session_write_close();
}
现在可以将数据存储在 $_SESSION 中,但问题是只要我使用我的帐户登录(我自己的登录表单,而不是 spotfiy 帐户),其他人都会登录,无论是哪个浏览器、ip等...
不知道怎么解决。 session_id 不应该生成一个随机 ID 吗?有人可以帮忙吗?
遗漏
if (session_id() == '') {
session_id('session1');
}
没有解决,因为我还需要读取和删除存储在会话中的数据。所以,另外我有这个解决方法:
public static function customSessionRead($name)
{
if (session_id() == '') {
session_id('session1');
}
session_start();
session_write_close();
return $_SESSION[$name];
}
和...
public static function customSessionDestroy()
{
session_start();
session_destroy();
}
如果我做对了..您的所有用户都得到相同的 session_id()。
所以他们在技术上共享一个会话。据我所知,如果您开始会话,session_id() 将自动生成。所以你不需要自己设置session_id()。
因此您的代码应如下所示:
class SystemHelper
{
/**
* if session_id is empty string, then session_id has not been initialized
* then set session_id named 'session1'
* start session needs 2 parameters, name and value
* always close session after writing
*
* @param string $name any given name
* @param [type] $value any given value
*
*/
public static function customSessionStore($name, $value)
{
session_start();
$_SESSION[$name] = $value;
session_write_close();
}
}
解决了,其实很简单。先说问题: 如果这样写:
session_id('session1');
在两者中,customStore 和 customRead 仅表示恢复会话。当然你总是会得到相同的数据,无论哪个浏览器,ip,...这就是恢复会话的意义。
解决了什么:
session_create_id($name);
所以,又满了:
public static function customSessionStore($name, $value)
{
// if (session_id() == '') {
// session_id('session1');
// }
session_create_id($name);
session_start();
$_SESSION[$name] = $value;
session_write_close();
}
并且,
public static function customSessionRead($name)
{
// if (session_id() == '') {
// session_id('session1');
// }
session_start();
session_write_close();
return $_SESSION[$name];
}