通过UIWebView登录后,会自动得到web服务器设置的cookie包括服务器中的seesionid。cookie不会自动保存在app里面,需要通过设置才能在下次启动app时获取。自动登录,需要设置header,才能将cookie带给web服务器。自动登录,需要web服务器端进行cookie验证方可登录。
一些说明:
- 通过UIWebView登录后,会自动得到web服务器设置的cookie包括服务器中的seesionid。
- cookie不会自动保存在app里面,需要通过设置才能在下次启动app时获取。
- 自动登录,需要设置header,才能将cookie带给web服务器。
- 自动登录,需要web服务器端进行cookie验证方可登录。
实现流程:
1. 做好Sign in页面后,通过get或post递交表单给web服务器,可以通过下面的代码遍历得到的cookie
- NSHTTPCookieStorage *myCookie = [NSHTTPCookieStorage sharedHTTPCookieStorage];
- for (NSHTTPCookie *cookie in [myCookie cookies]) {
- NSLog(@”%@”, cookie);
- }
2. 为了实现自动登录,需要将cookie保存下来,以便自动登录,只需要加上一行代码。
- NSHTTPCookieStorage *myCookie = [NSHTTPCookieStorage sharedHTTPCookieStorage];
- for (NSHTTPCookie *cookie in [myCookie cookies]) {
- NSLog(@”%@”, cookie);
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; // 保存
- }
3. 自动登录时,需要将上次保存的cookie取出来设置header拿给web服务器,代码如下。
- // 寻找URL为HOST的相关cookie,不用担心,步骤2已经自动为cookie设置好了相关的URL信息
- NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:HOST]]; // 这里的HOST是你web服务器的域名地址
- // 比如你之前登录的网站地址是abc.com(当然前面要加http://,如果你服务器需要端口号也可以加上端口号),那么这里的HOST就是http://abc.com
- // 设置header,通过遍历cookies来一个一个的设置header
- for (NSHTTPCookie *cookie in cookies){
- // cookiesWithResponseHeaderFields方法,需要为URL设置一个cookie为NSDictionary类型的header,注意NSDictionary里面的forKey需要是@”Set-Cookie”
- NSArray *headeringCookie = [NSHTTPCookie cookiesWithResponseHeaderFields:
- [NSDictionary dictionaryWithObject:
- [[NSString alloc] initWithFormat:@”%@=%@”,[cookie name],[cookie value]]
- forKey:@”Set-Cookie”]
- forURL:[NSURL URLWithString:HOST]];
- // 通过setCookies方法,完成设置,这样只要一访问URL为HOST的网页时,会自动附带上设置好的header
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:headeringCookie
- forURL:[NSURL URLWithString:HOST]
- mainDocumentURL:nil];
- }
4. web服务器验证app带过来的cookie信息,来完成登录。
如果访问的页面没有cookie验证的代码,那么就访问那些*loginAction之类有验证cookie的页面再跳转,或者告诉同事在你访问的那个页面加个cookie验证登录的就行了。
内容出处:,
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/procedure/314.html
相关推荐
-
ASP.NET Core Blazor未来的Web开发框架
如果你是一名.NET程序员,并且之前使用过Vue、Angular或者React,而没有了解过Blazor或者没有了解过WebAssembly,现在看到下面这段代码,我估计你一定会被…
-
Netlify中的WebAssembly Serverless函数
Netlify 是一个开发和托管 Jamstack 应用的平台。实际上,Jamstack 是Netlify 的创始人 Mathias Biilmann 于 2015年造出来的一个词…
-
Python在selenium里面注入JavaScript程序的方法
1. 介绍 1.1 介绍 在使用selenium去爬取网页的时候发现有的网站的结构设计的非常复杂,如果使用chrome自带的find_element_by_xxx方法想要得到目标元…
-
后端生成Token架构与设计详解
目的:Java开源生鲜电商平台-Java后端生成Token目的是为了用于校验客户端,防止重复提交。 技术选型:用开源的JWT架构。 1.概述: 在WEB项目中,服务端和前端经常需要…
-
如何用Q模块的链式调用来解决nodejs中的回调地狱问题
对于用过Nodejs的小伙伴都知道 Nodejs是典型的异步开发模式, 它最大的优势也是异步机制 这种机制带来巨大的性能优势的同时, 也带来了回调模式引发的回调地狱问题,从而导致开…
-
去除discuz中discuz.gtimg.cn/cloud/scripts/discuz_tips.js代码最完美方法,不影响伪静态
最近一直在用discuz二次开发一个新项目,发现模版 footer.htm 里面是用 调用的一段代码一直拖慢页面,还会影响部份js的效果,有网页去除方法是在模版底部去掉 代码,但…
-
Vue.js 3.2响应式部分的优化
Vue 3 正式发布距今已经快一年了,相信很多小伙伴已经在生产环境用上了 Vue 3 了。如今,Vue.js 3.2 已经正式发布,而这次 minor 版本的升级主要体现在源码层级…
-
.NET Core+K8S+Apollo玩转配置中心
1.引言 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,…
-
在 Go 语言中管理 Concurrency 的三种方式
相信大家踏入 Go 语言的世界,肯定是被强大的并发(Concurrency)所吸引,Go 语言用最简单的关键字go就可以将任务丢到后台处理,但是开发者怎么有效率的控制并发,这是入门…
-
JAVASCRIPT混淆及反混淆代码工具
介绍 在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。 什么是混淆 混…