我试图使一个登录系统与PhP后端角。
当人们登录时,这是一个名为:
// here check for good request
$account = // found the account thanks to PDO
$accountId = $account["id"];
session_start();
$_SESSION["accountId"] = $accountId;
setcookie("accountId", $accountId, [
'expires' => time() + 86400,
'path' => '/',
'domain' => $_SERVER['HTTP_HOST'],
'secure' => true,
'httponly' => false,
'samesite' => 'None',
]);
然后,当我想根据用户获取信息时,我调用这个脚本:
session_start();
if(!isset($_SESSION["accountId"]) && !isset($_COOKIE["accountId"])) {
echo "You are not logged";
die();
}
$accountId = isset($_SESSION["accountId"]) ? $_SESSION["accountId"] : $_COOKIE["accountId"];
// here get data
echo json_encode($accountId);
当我在我的浏览器中这样做的时候,它工作了。
但是当我使用 angular 时,_SESSION 美元
和 _COOKIE 美元
是空的,所以它向我显示“您没有被记录”。
我的代码在角度:
this.http.get<T>("http://my-url.com/script.php").toPromise().then((result) => console.log(result));
我的问题:
我应该如何使用PhP/Angular请求根据登录的帐户进行安全登录和数据请求?我是否应该更改html" target="_blank">语言(改为Java/C#/…)*(这对我来说不是问题)?
我试了什么?
{和凭据:真}
:this.http.get<T>("http://my-url.com/script.php", { withCredentials: true }).toPromise().then((result) => console.log(result));
我得到了一个CORS错误。在更新我的标题后(见下文),我得到了同样的结果:在浏览器中它很好,但不是有角度的。
>
我尝试使用$_SESSION
和$_COOKIE
。两者都在我的浏览器中工作,但不在angular中。
我想每次都将accountId
放在请求中。但这显然不安全,也不是一个很好的主意。。。
比如我有CORS问题,我添加几行来管理它们:
header('Access-Control-Allow-Headers: Access-Control-Allow-Origin, Content-Type');
header('Access-Control-Allow-Origin: http://localhost:4200');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Credentials: true');
header('Content-Type: application/json, charset=utf-8');
但是,它解决了所有CORS问题,但不是我的会话/cookie为空。
那么,我怎样才能像我的浏览器一样在 Angular 中保留会话和/或 cookie?
必须在php脚本中添加cors头
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, DELETE, PUT, PATCH, OPTIONS');
header("Access-Control-Allow-Headers: *");
我认为你的问题不在于CORS。我在php后端(具体来说是CodeIgniter)遇到过类似的情况,问题出在SameSite cookie属性上。尝试将此代码添加到配置文件或索引中:
setcookie($name, $value, [
'expires' => time() + 7200,
'path' => '/',
'domain' => 'domain.com',
'secure' => true,
'httponly' => false,
'samesite' => 'None',
]);
或者对于php
session_set_cookie_params([
'lifetime' => time() + 7200,
'path' => '/',
'domain' => $_SERVER['HTTP_HOST'],
'secure' => true,
'httponly' => false,
'samesite' => 'None'
]);
检查这个问题,它可能会给你更多的提示。
首先,您可以尝试使用香草js函数fetch(“url”)
来处理cookie和会话存储。
但我建议您对 API 请求使用令牌,而不是会话存储或 cookie。您的问题会更少,以后升级也更容易。
例如
当然,你需要重新设计你的数据库和你的PHP代码(作为JS代码)。当用户登录时,为了增加一点安全性,您可能需要根据需要使用 md5()
或更好的方法(如 AES)对密码进行哈希处理,并检查此哈希值是否在数据库中对应。然后,响应成功或错误,后跟用户的令牌(在注册 PHP 期间创建,通常是几个 md5
() 和 uniqid()
)。此令牌必须很长以避免暴力破解。
然后,一旦用户登录并且Js代码拥有令牌,您只需使用此令牌发出API请求。更常见的是,令牌在标头中提供,授权:承载
问题内容: 运行Angular Protractor测试后是否可以将测试浏览器窗口保持打开状态?我在FireFox中失败了一个艰难的测试,访问网页状态以查看发生了什么非常有用。 问题答案: 您可以使用量角器调试/暂停功能来暂停e2e运行,这最终将使浏览器保持打开状态:此处有更多信息 为此,请在失败的量角器测试上添加此行 还有一个非常有用的工具,称为elementor,您稍后可能需要看看。
我正在创建一个Ionic应用程序(iOS和带有电容的Android)。我在我的应用程序中添加了Firebase身份验证,但每次退出应用程序时,我都需要重新登录。 我看到了这个,但是没有太多的文档,并且我尝试了它但是没有工作。我不确定我正确地使用了它,或者在正确的地方添加了代码。https://firebase.google.com/docs/auth/web/manage-users?HL=en
问题内容: 我正在尝试使用Selenium Web驱动程序和node js自动执行几个页面。我可以登录,但是登录后我想使用由Web驱动程序启动的同一会话,以便可以在受会话保护的页面上进行自动测试。这是我的尝试 登录后我不小心丢弃了浏览器吗? 问题答案: 您可能只在处理计时问题。硒移动 非常快 。比您作为用户进行交互的方式要快得多。因此,它通常以似乎无法预测的方式起作用。但这仅仅是因为Seleniu
我们没有通过magento连接安装m2epro,因此我们无法升级M2epro。M2epro支持团队建议删除以下文件并使用Magento连接安装。 应用程序/代码/社区/Ess/M2ePro、应用程序/设计/adminhtml/默认/默认/布局/M2ePro.xml、应用程序/设计/adminhtml/默认/默认/模板/M2ePro、应用程序/等/模块/Ess_M2ePro.xml、js/M2ePr
问题内容: 我正在使用magento社区版本1.7.0.2。我无法登录到magento的后端。我知道此问题可能是由于Chrome不接受Cookie所致。但是如何解决该问题,请提供帮助。谢谢 问题答案: 一种简单的解决方案是使用Opera浏览器进行安装并使用它登录,因为它会保存cookie本身。有用!
![Frame Details][firebug正确显示了帧,但无法切换到帧]1 我正在尝试切换到id =所有设备的框架,但无法到达那里。我可以切换到任何其他框架,但不能切换到这个框架。以下是我尝试过的选项 browser.driver.switchTo(). frame('所有设备');browser.driver.switchTo(). frame(browser.driver.findEle