Web Api跨域解决及Session使用

4 篇文章 0 订阅
3 篇文章 0 订阅
  • 跨域解决

1、使用Nuget添加Cors包

2、全局跨域

3、部分方法允许跨域

如果不想所有方法都能被跨域访问,可以使用[EnableCors]属性指定,具体实现如下:

a)  WebApiConfig.cs文件保持开启跨域支持

b)  在方法或控制器上配置属性

  • 跨域Session问题

1、Web Api默认关闭Session。开启方法如下:

在Global.asax文件中添加方法如下:

//初始化开启Session
        public override void Init()
        {
            this.PostAuthenticateRequest += (sender, e) =>
            {
                HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
            };
            base.Init();
        }

2、由于跨域时默认是不允许操纵cookie的,这会导致每次跨域调用方法都是使用的不同的sessionId,开启session的意义就不存在了,需要进行如下设置进行解决:

    a)  WebApiConfig文件配置跨域的语句改为如下所示:

 // 开启全局跨域
            var cor = new EnableCorsAttribute("http://127.0.0.1:5500", "*", "*");
            cor.SupportsCredentials = true;// 允许cookie发送,否则session不可用
            config.EnableCors(cor);

    b)   前端js配置全局ajax

// ajax全局设置
$.ajaxSetup({
    xhrFields: {
        withCredentials: true // 跨域允许存取cookie
    }
});
  • 参考文档

实现参考:https://www.cnblogs.com/landeanfen/p/5177176.html

方法跨域提示:https://yq.aliyun.com/wenzhang/show_56581

跨域session:https://www.cnblogs.com/zhaoshang/p/9378928.html

jquery ajax 设置全局(常量和变量):https://www.cnblogs.com/007sx/p/7048373.html

cors详解:https://blog.csdn.net/java_green_hand0909/article/details/78740765

Flask中的跨域访问(Cross-Origin Resource Sharing, CORS)默认情况下会限制来自其他域名的请求对应用内部的Session数据的操作。当你尝试从一个不同的源(如浏览器的同源策略限制)访问Flask应用,并且该应用依赖于Session进行用户状态管理时,可能会遇到session丢失的问题。 这是因为浏览器出于安全考虑,不允许在子域之间共享Cookie,而Session通常依赖于Cookie来跟踪用户的登录状态。为了解决这个问题,你可以采取以下措施: 1. **启用Flask-Cors**:安装`flask-cors`库并将其配置在Flask应用中,允许特定的来源访问。例如: ```python from flask_cors import CORS app = Flask(__name__) CORS(app, resources={r"/*": {"origins": "*"}}) # 允许所有来源 ``` 2. **设置Access-Control-Allow-Origin**头**:在响应中明确指定哪些源可以访问session数据。** ```python @app.after_request def after_request(response): response.headers.add('Access-Control-Allow-Origin', '*') return response ``` 3. **使用JSON Web Tokens (JWT)**:如果安全性和跨域需求较高,可以考虑使用JWT代替Session,它可以直接通过HTTP头部传输,不受同源策略影响。 4. **客户端处理**:在前端代码中,使用Fetch API或其他支持CORS的库,可以在发送包含Session信息的请求时,手动设置`withCredentials: true`,允许跨域携带cookie。 尽管采取了这些措施,还是要注意保护敏感信息,避免恶意站点利用开放的CORS获取用户数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值