通过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
相关推荐
-
企业微信万亿级日志检索系统
背景 开发在定位问题时需要查找日志,但企业微信业务模块日志存储在本机磁盘,这会造成以下问题: 日志查找效率低下:一次用户请求涉及近十个模块,几十台机器,查找日志需要登录机器 gre…
-
牛人整理的100个最常用的PHP函数
下面的列表是最常用的前 100 个 PHP 函数:它们是最常用的 PHP 中自带的函数。 这些函数被命名使用,并从 1 到 100 进行排序。 其他的 4500 个函数现在还没在排…
-
2020年14个最有用的NodeJS库
Express 快速,简单,极简的节点Web框架 对…有好处 · 易于处理多种类型的请求,例如GET,PUT,POST和DELETE请求 · 快速构建单页,多页和混合Web应用程序…
-
实现无感刷新token的方法
当token过期的时候,刷新token,前端需要做到无感刷新token,即刷token时要做到用户无感知,避免频繁登录。实现思路
-
移动App架构经验总结
架构也因项目而异。不同的项目需求不同,对应的架构也会不同。 架构分层 API的设计完毕之后。接下来我就会考虑App项目的总体架构了。总体怎样架构,我也以前做过不少尝试。 早期的时候…
-
Springboot+Python之RSA加解密方案
1、RSA java实现加解密 import java.io.ByteArrayOutputStream; import java.security.Key; import jav…
-
去除discuz中discuz.gtimg.cn/cloud/scripts/discuz_tips.js代码最完美方法,不影响伪静态
最近一直在用discuz二次开发一个新项目,发现模版 footer.htm 里面是用 调用的一段代码一直拖慢页面,还会影响部份js的效果,有网页去除方法是在模版底部去掉 代码,但…
-
如何设计一款稳定、好用、安全的推送SDK?
一款稳定、易用、安全、小巧灵活的推送SDK是怎么样的?本文将从“小”、“稳”、“好用”以及“安全”四个角度来具体阐述。 对于非技术出身的产品经理来说,如果突然接到一个要“设计SDK…
-
springboot:一个ASpect实现防止表单重复提交+限制IP访问频率
@Target({ ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @int…
-
谷歌搜索库:googlesearch-python
谷歌搜索 googlesearch是一个Python库,可轻松爬取Google搜索结果。googlesearch使用requests和 BeautifulSoup4抓取Google…