我编写了一个使用$.post
JQuery调用大量调用的Web应用程序.现在我想发送withCredentials: true
它以保持会话活着,看起来像这样$.ajax
(并且也像这样):
$.ajax({
type: 'post',
url: 'http://example.com/server/api.php',
crossDomain: true,
dataType: "json",
xhrFields: {
withCredentials: true
},
data: {
username : 'test',
password : 'test'
},
success: function (d) {
$('body').html(d.status);
}
});
Run Code Online (Sandbox Code Playgroud)
这是因为我现在想将PHP文件上传到我的服务器并使用Cordova导出客户端.(withCredentials: true
仅包括在我的本地主机服务器上进行测试)我可以将其打包到$.post
呼叫中还是需要更换所有呼叫?(我会写一个类似于$ .post的新函数)
我在脚本上遇到一些问题,我使用PHP和jquery来创建登录系统.
首先,我有PHP页面包含登录表单.当用户点击提交时,我使用jquery将数据发送到服务器
$.post('server_login.php', {username:username.val(), password:password.val()}, function(data){
alert(data);
});
Run Code Online (Sandbox Code Playgroud)
在server_login.php中我有做登录用户的功能.
if($_POST['username']=='username' && $_POST['password']=='1234'){
$expire = time() + 60*60*24*30; //1 month expired.
setcookie("user_id", $_POST['username'], $expire);
echo true;
}
Run Code Online (Sandbox Code Playgroud)
和jquery在我的登录页面上提醒"1".
问题是,当我刷新我的网站并收回cookie时,它没有告诉我.
print_r($_COOKIE);
Run Code Online (Sandbox Code Playgroud)
哪里不对了?
我正在尝试为我的.Net Web API应用程序中的某些域启用CORS,并且能够通过此代码在Application Start上执行此操作.
public static void Register(HttpConfiguration config)
{
//below comma separated string is built from database
var domains = "http://www.myfirstdomain.com,http://www.myseconddomain.co.uk .... about 130 domains more..";
config.EnableCors(new EnableCorsAttribute(domains, "*", "*"));
Run Code Online (Sandbox Code Playgroud)
但是,如果在应用程序处于活动状态时添加了新域,则在回收应用程序池并再次构建此列表之前,将不允许这些域发布.
有没有什么办法可以在我的应用程序生命周期内更新此列表?我知道我可以定期回收应用程序池,但这会导致某些请求出现延迟,理想情况下我可以不这样做.
我知道我可以在控制器方法上启用它,即..
[EnableCors("http://domain1.com,http://domain2.com", "*", "*")]
public HttpResponseMessage PostAsync([FromBody] MyRequest myRequest)
{
Run Code Online (Sandbox Code Playgroud)
但是,逗号分隔参数必须再次声明为常量,因此不能是动态的.
我是否遗漏了一些明显的显而易见的事情,或者是否有人会想到这样做的好方法?
编辑
这是我尝试编写自己的自定义EnableCors属性.
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)]
public class EnableCorsByDomainAttribute : Attribute, ICorsPolicyProvider
{
private readonly CorsPolicy _policy;
public EnableCorsByDomainAttribute()
{
_policy = new CorsPolicy
{
AllowAnyMethod = true,
AllowAnyHeader = true
};
var …
Run Code Online (Sandbox Code Playgroud) 我正在尝试做一些简单易行的事情:设置一个cookie!但浏览器(Chrome和Safari测试)只是忽略了它们.所以响应头看起来像:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:*
Connection:keep-alive
Content-Encoding:gzip
Content-Type:application/json; charset=utf-8
Date:Wed, 19 Jul 2017 04:51:51 GMT
Server:nginx
Set-Cookie:UserAuth=<some jwt>; Path=/; Domain=10.10.1.110; Expires=Wed, 19 Jul 2017 12:51:51 GMT; HttpOnly; Secure
Transfer-Encoding:chunked
Vary:Origin
Run Code Online (Sandbox Code Playgroud)
请求确实包括withCredentials=true
.但Chrome中的Cookie部分是空的.我已经尝试完全删除域,删除路径,我能想到的每个配置,但浏览器只是不会播放球.
我错过了什么?
我正在编写一个 Django 应用程序,其中有一个名为 的模型Website
,其中包含人员网站。我只允许在我的数据库中拥有网站的人使用我的 Django REST API。我正在使用该django-cors-headers
包将人们的域列入白名单: https: //github.com/adamchainz/django-cors-headers。
CORS_ORIGIN_WHITELIST
settings.py 中的变量允许我将域列入白名单,如https://github.com/adamchainz/django-cors-headers#cors_origin_whitelist所示
问题是我必须查询我的模型以获取网站域,将它们附加到列表中,然后将该列表放入CORS_ORIGIN_WHITELIST
. 但我无法在 settings.py 中执行此操作,因为模型是在应用程序启动后加载的,而 settings.py 是启动应用程序的模型。
有谁知道解决办法吗?任何建议将不胜感激。提前致谢。