在php中存储多个$ _SESSION变量,并在另一个页面中回显它们

时间:2015-10-04 17:08:58

标签: php session

在同一个浏览器中,不在同一个域中:

如果在site A上,我会在会话中存储:

session_start();
$_SESSION['fruit'] = "Apple";

如果在site B上,我会在会话中存储:

session_start();
$_SESSION['color'] = "green";

我如何回应site C

// Apple is green.
session_start();
$_SESSION['fruit'].' is '.$_SESSION['color'];

我是否有可能从另一个域但在同一浏览器中回显所有$_SESSION个变量?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

简短回答:

答案很长:嗯......没有,但是,如果您构建两个单独的应用程序,每个域一个,并通过一个接口(例如REST端点)将会话从一个应用程序发送到另一个应用程序。

答案 1 :(得分:1)

,你可以。

您需要围绕<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.gaurav.locknowtest2" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity$controller" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MainActivity" android:permission="android.permission.BIND_DEVICE_ADMIN" > <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_sample" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver> </application> </manifest> site Asite B分享您的会话ID。由于会话ID通常存储在Cookie中,因此您需要在所有域中传输这些信息。

如果site C都是同一站点的子域,那么您需要做的就是在php.ini文件中更改site A/B/C指令,如:

session.cookie_domain

通过此功能,您可以跨多个子域共享会话ID,例如ini_set('session.cookie_domain', '.domain.com'); A.domain.comB.domain.com,...

Harder会对不同的域执行相同的操作,例如C.domain.comA.comB.com,因为您无法通过Cookie进行转移,因为Cookie受到“同一来源”的限制“政策。您可以做的是发出跨域请求。你可以找到here一些方法。

现在您需要会话数据的公共存储空间。大多数网站使用数据库来存储会话值而不是文件,因为数据库在多Web服务器环境中更容易扩展。您可以使用custom session handler来实现数据库存储。但如果这些域都在同一台服务器上,那么您需要做的就是设置相同的session_save_path

答案 2 :(得分:0)

会话仅限于特定域。所以,你不能以这种方式访问​​。