gpt4 book ai didi

javascript - 跨子域的 PHP $_SESSION

转载 作者:行者123 更新时间:2023-11-30 00:34:34 24 4
gpt4 key购买 nike

好的,所以我有 example.com,然后我使用 Javascript 运行 XHR 请求到 api.example.com 之前我有 api.example。 com as example.com/api 但我想将它移动到一个子域并且登录工作正常,直到我将它移动到 api.example.com

我正在测试登录脚本并尝试保持 session 有效,但每次运行时都会清除 $_SESSION

db_connect.php

include_once("config.php");
ob_start();
session_start();
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

auth.php

<?php
require($_SERVER['DOCUMENT_ROOT'].'/db_connect.php');

if (!$db) {
die('Could not connect: ' . mysql_error());
}
$method = $_SERVER['REQUEST_METHOD'];

if ( isset($_GET['id']) ){
$id = $_GET['id'];
} else {
$id = 'all';
}

switch (strtoupper($method)) {
case "GET":
if ($_SESSION['auth']) {
$check = true;
} else {
$check = false;
}
$arr = json_encode(array('result'=>$check));
echo $arr;
break;
default:
echo "Streets closed pizza boy!";
}

signin.php

<?php
require($_SERVER['DOCUMENT_ROOT'].'/db_connect.php');

if (!$db) {
die('Could not connect: ' . mysql_error());
}
$method = $_SERVER['REQUEST_METHOD'];

if ( isset($_GET['id']) ){
$id = $_GET['id'];
} else {
$id = 'all';
}

switch (strtoupper($method)) {

case "POST":
$postdata = json_decode(file_get_contents("php://input"));
$src = (array)$postdata->user;
$password = hash( 'sha512', $src['password']);

$q = $db->query("SELECT *
FROM users u
WHERE u.email = '".$src['email']."'
AND u.password = '".$password."'");

if($q->num_rows > 0){
$check = true;
$_SESSION['auth'] = 1;

$maps = array();
while($row = mysqli_fetch_array($q)) {
$product = array(
'auth' => 1,
'id' => $row['id'],
'name' => $row['name'],
'email' => $row['email'],
'access' => $row['access']
);
array_push($maps, $product);
}

//$_SESSION['company_id'] = $product['company_id'];
}else{
$check = false;
}

$_SESSION['id'] = $product['id'];
$_SESSION['email'] = $product['email'];

setcookie("username", $productx§['email'], time()+(84600*30));

$arr = json_encode(array('result'=>$check, 'user'=>$maps));
echo $arr;
break;

default:
echo "Your favorite color is neither red, blue, or green!";
}

我尝试将 db_connect.php 设置为

<?php
include_once("config.php");
ob_start();
session_set_cookie_params(0, '/', '.example.com');
session_start();
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

但这什么都不做, session 变量丢失了。

PHP 文件也通过 AJAX 调用。

无论是 angularjs DOM 的所有页面都应该连接到数据库吗?

最佳答案

要使用跨子域 session ,您必须在所有子域项目中使用以下代码:

session_name('SessionName');
session_set_cookie_params(
1800,
ini_get('session.cookie_path'),
'.example.com'
);
session_start();

重要:仅当所有子域都在一台服务器上时它才有效(因为 session 存储在一个 tmp 目录中)。如果你想在不同的服务器上使用类似的 session ,使用 SAN 存储或将 session 存储在 memcached 等中。

ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', 'tcp://122.122.122.122:11211');

session_name('SessionName');
session_set_cookie_params(
1800,
ini_get('session.cookie_path'),
'.exmaple.com'
);
session_start();

关于javascript - 跨子域的 PHP $_SESSION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27767513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com