在同一个浏览器中,不在同一个域中:
如果在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
个变量?
感谢您的帮助。
答案 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 A
和site 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.com
,B.domain.com
,...
Harder会对不同的域执行相同的操作,例如C.domain.com
,A.com
,B.com
,因为您无法通过Cookie进行转移,因为Cookie受到“同一来源”的限制“政策。您可以做的是发出跨域请求。你可以找到here一些方法。
现在您需要会话数据的公共存储空间。大多数网站使用数据库来存储会话值而不是文件,因为数据库在多Web服务器环境中更容易扩展。您可以使用custom session handler来实现数据库存储。但如果这些域都在同一台服务器上,那么您需要做的就是设置相同的session_save_path。
答案 2 :(得分:0)
会话仅限于特定域。所以,你不能以这种方式访问。