【问题标题】:Swift: How to use NSURLSession to query external database?Swift:如何使用 NSURLSession 查询外部数据库?
【发布时间】:2015-08-25 15:31:49
【问题描述】:

我写这个问题是因为我很难理解如何使用 Swift 实现一个简单的基本身份验证登录。

我的应用程序的第一个屏幕是一个带有文本字段(用户名和密码)和一个登录按钮的简单表单。在我的 LoginViewController.swift 文件中,我将按钮链接到此:

@IBAction func doLogin(sender : AnyObject) {
}

现在的问题是我不知道该怎么做。我在 MAMP 中有一个本地服务器,其中有这个 file.php 查询数据库并且运行良好:

<?php

$deep="";
require_once($deep."class/config.php");
$sistema = new config($deep);

if( isset($_GET["username"]) && isset($_GET["password"]) ) {
    $username=mysqli_real_escape_string($sistema->dbConn,$_GET["username"]);
    $password=mysqli_real_escape_string($sistema->dbConn,$_GET["password"]);
    $userL=$sistema->user->allAdmin("WHERE username='".$username."' AND password='".$password."' ");

    echo json_encode($userL);
}

?>

那么我怎样才能对这个文件执行 GET 请求呢?我想我需要用这种形式的用户数据创建一个 URL:

http://localhost:8888/excogitoweb/loginM.php?username=lorenzo&password=lorenzo

但是我不知道如何继续。如何执行此请求以检索该 JSON 内容?以及如何检查 JSON 内容以了解登录过程是否成功? 我在 youtube 上看过很多教程,总的来说 this 但即使我复制他们显示的代码,我总是会遇到编译错误......

【问题讨论】:

  • 认证不简单,很难得到正确的。如果这是一个真正的应用程序,其中身份验证很重要,请从领域专家那里获得帮助,那么很难得到正确并且很容易出现一个破坏安全性的小缺陷。
  • 类似于this question 2 小时前的同一 OP。
  • 这不是那么重要...我只需要一个基本的身份验证,尽可能简单。我只想对该文件执行一个 HTTT GET 请求并检查返回的 JSON 数据是否包含用户(使用该用户名和密码)......仅此而已。有那么难吗?
  • 等我给你写你需要的代码
  • 哦...谢谢。我真的很感激......你会写一个答案吗?

标签: php mysql json swift


【解决方案1】:

对于“正常”的 GET 请求,您需要一个带有您的 url 的 NSURLRequest ......就像这样:

if let requestURL: NSURL = NSURL(string: "http://localhost:8888/excogitoweb/loginM.php?username=lorenzo&password=lorenzo") as NSURL? {
    let urlRequest: NSURLRequest = NSURLRequest(URL: requestURL)
    let urlSession = NSURLSession.sharedSession().dataTaskWithRequest(urlRequest, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
        if let responseJSON: [String: String] = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: nil) as? [String: String] {
            ///Here you can handle the responded JSON
        }
    })
    urlSession.resume()
}

别忘了,当你处理响应的 JSON 时,你是在后台任务中......如果你想在那里做一些 UI 工作,你需要将它分派到 mein 队列

还建议您为此类事情使用 HTTP POST 而不是 HTTP GET

更新

if let responseJSON: [[String: String]] = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: nil) as? [[String: String]] {
                ///Here you can handle the responded JSON
            }

【讨论】:

  • 感谢您的回答。我想我忘了写我从 php 文件返回的 JSON 格式是这样的: [{"id":"8","nome":"Lorenzo","cognome":"Vinci","email ":"silent.lory@gmail.com","用户名":"lorenzo","密码":"lorenzo","auth":"Utente"}]
  • 它和你写的东西一起工作吗?还是我应该只得到一个带有用户名和密码的json?
  • 不,您发布的 JSON 是 JSONArray... 我会在我的回答中给您写一个更新,如何使其正常工作...
  • [String: String] = 字典,其中键和值是字符串(或 JSON 对象)... [[String: String]] = 包含字典的数组,其中键和值是字符串(或 JSON 数组)
  • 没问题,伙计,如果您需要进一步的帮助,请写信给我 :-)
猜你喜欢
  • 2012-08-27
  • 1970-01-01
  • 2014-06-16
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
相关资源
最近更新 更多