如何将 ASP 页面和查询集成到 iOS 应用程序中?

How can I integrate ASP pages and queries into an iOS app?

我现在有一个相当令人费解的场景,即弄清楚如何将几个大型查询(每个查询有许多不同的项目)集成到一个 iOS 与基于 C# 的 REST API 通信的应用程序中].我正在尝试在应用程序中提取多个报告,如果我在 API 中重新创建所有这些查询以及在 iOS 中重新创建界面,它可能相当 time-consuming。访问报告的页面是一个经典的 ASP 页面,并包含一个安全性 header 以确保用户 session 已通过登录页面进行验证。有没有办法将其设置为 UIWebView 并以某种方式在加载 UIWebView 时验证 session?否则将是一个漫长而艰巨的过程。

用户使用 NSURLRequest 登录到 UIWebView 后,cookie 是否可能被传输过来?

每个页面都有代码来检查 session 是否已通过身份验证

<%
if Session("portallogin") <> "good" then
  response.redirect("example.com")
end if
%>

这里是一些负责初始认证的相关登录代码

'Get the username and password sent as well as user ip

On Error resume next
Session("login") = "bad"               'init to bad
sent_username = Request("username")
sent_password = Request("password")
source = Request.form("source")
remember_me = Request("remember_me")
userip = Request.ServerVariables("REMOTE_ADDR")
sent_username = replace(sent_username,"'","&#39;")
sent_username = protectval(sent_username)
sent_password = protectval(sent_password)

if rs.BOF and rs.EOF then
Session("login") = "bad"
response.cookies("user")("name") = ""
response.Cookies("user")("pword") = ""
else
arr = rs.GetRows()
password = arr(0,0)
memberid = arr(1,0)
expired = arr(2,0)
if sent_password = password then
Session("login") = "good"
if expired = "True" Then
%>

'''''''''''''''''''
if session is good
'''''''''''''''''''
Session("username") = sent_username
Session("maintuser") = sent_username
Session("b2buser") = sent_username
Session("password") = sent_password
Session("memberid") = memberid
Session("customernumber") = customernumber
Session("cno") = cno
Session("login") = "good"

if remember_me = "on" Then
  response.cookies("entry")("doorway") = cook(sent_username)
  response.Cookies("entry")("michael") = cook(sent_password)
  response.Cookies("entry")("remember_me") = cook("CHECKED")
  Response.Cookies("entry").Expires = Now() + 365
else
  response.cookies("entry")("doorway") = ""
  response.Cookies("entry")("michael") = ""
  response.Cookies("entry")("remember_me") = ""
  Response.Cookies("entry").Expires = Now() + 5
end if

由于大多数参数都引用请求集合,您可以将参数放在查询字符串中,从而使它们成为 UIWebView 基础 url 的一部分。所以你的 URL 请求看起来像

file.asp?username=xxx&password=yyy&source=zzz&remember_me=on

您需要将示例文件中的第 7 行更改为

source = Request("source")

但它仍然适用于现有请求。

此代码的明显问题是您的应用程序中存储了用户名和密码,这可能会被拦截和滥用。所以要注意这一点。我不推荐这种方法。

更好的解决方案是考虑重写登录函数以在数据库中存储临时 GUID 和时间戳,然后可以将其作为查询字符串的一部分传递到请求中。然后可以修改您的身份验证代码以检查该 GUID 是否有效并更新与 GUID 相关联的时间戳(或者检查会话是否使用该页面的旧访问方法)。