Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 身份验证过程中,为什么要在数据库中存储sessionID?_Php_Android_Authentication - Fatal编程技术网

Php 身份验证过程中,为什么要在数据库中存储sessionID?

Php 身份验证过程中,为什么要在数据库中存储sessionID?,php,android,authentication,Php,Android,Authentication,我对认证的正常过程有一个问题 我有很多谷歌,读了很多书,但是仍然不能很清楚的了解认证的过程, sessionID实际上是什么? 为什么我们要在数据库中存储sessionID,因为我认为sessionID将在某个时候过期。为什么我们还需要存储它们? 如果我在android应用程序或桌面应用程序中使用OAuth会怎么样 更多说明: 例如,我使用表单登录。用户发送“用户名”和“密码”,然后我使用MD5($passWord),然后将它们全部发送到服务器URI,对吗 然后服务器获取用户名和密码,然后将密码

我对认证的正常过程有一个问题

我有很多谷歌,读了很多书,但是仍然不能很清楚的了解认证的过程, sessionID实际上是什么? 为什么我们要在数据库中存储sessionID,因为我认为sessionID将在某个时候过期。为什么我们还需要存储它们? 如果我在android应用程序或桌面应用程序中使用OAuth会怎么样

更多说明:

  • 例如,我使用表单登录。用户发送“用户名”和“密码”,然后我使用MD5($passWord),然后将它们全部发送到服务器URI,对吗

  • 然后服务器获取用户名和密码,然后将密码与数据库中的密码进行比较,如果相同,则正确。服务器将会话ID发送回用户,将设置cookie。这个过程正确吗

  • 如果它是正确的,服务器将在数据库中存储sessionID,但sessionID将在一段时间内过期,为什么我们将会话ID存储在数据库中

  • 处理安全数据时,应使用SSL(https)。对密码执行MD5是毫无意义的。如果我抢占了流量,我可以用蛮力和/或彩虹表来un-MD5。MD5不是为了安全。它用于识别大数据块和小得多的数据块

  • 您不应该将密码存储在数据库中。您应该在数据库中存储密码的盐散列。然后,对用户发送的密码进行加密和散列,查看它是否与数据库中的密码匹配。同样,不要使用MD5。使用更好(更长)的杂烩,并确保它是咸的

  • 服务器需要知道哪些会话已打开并正在使用。所以,它必须存储它们。您不需要存储会话ID。服务器需要存储会话ID。会话到期时,服务器将删除该会话

  • 例如,我使用表单登录。用户发送“用户名”和“密码”,然后我使用MD5($passWord),然后将它们全部发送到服务器URI,对吗

    不是。Md5是一个弱散列算法,还有其他更安全的算法。除此之外,您生成的哈希应该比

    hash('whatever_algorithm', $password)
    
    有像PHPass这样的库和像password\u hash这样的函数可以帮助您

    作为一种协议,您应该使用SSL并选择https

    然后服务器获取用户名和密码,然后将密码与数据库中的密码进行比较,如果相同,则正确。服务器将会话ID发送回用户,将设置cookie。这个过程正确吗

    这个过程是错误的,因为您不应该在数据库中保留清晰的凭据数据,应该存储的是凭据的哈希,您应该尝试使用用户提供的用户名+密码复制它。 散列是一种非对称算法:它只走一条路

    您可以通过在会话上添加一些遵循特定预期输入/输出交换的身份验证步骤来加强安全性

    如果它是正确的,服务器将在数据库中存储sessionID,但sessionID将在一段时间内过期,为什么我们将会话ID存储在数据库中

    您可以在sessionID处于活动状态(而不是超时)时存储它,这样用户仍然可以连接,而无需重新验证。 当会话返回错误代码时,您将其ID保留在数据库中,以便跟踪相关信息并生成日志。 例如,您可以:

    • 在会话表中添加客户端的IP,以便跟踪
    • 添加链接到会话的错误代码,以便跟踪内容
    • 在表中添加日期时间,以便在

    如果在会话期间发生错误,您可能需要知道原因(有人试图绕过您的会话安全性或会话实现中的错误)。

    当您通过数据库存储会话处理时,您还需要将id存储在数据库中。通常会话存储在磁盘上。顺便说一句,不要使用MD5作为密码的哈希方法,它现在是不安全的。相反,使用MD5,使用SHA1。我可以发布一段代码来使用它。如果你需要的话告诉我很好的解释!!谢谢大家!!我对认证很陌生,我其实不知道认证的过程。谢谢大家!我对身份验证非常陌生,实际上我不知道过程@凯诺。1-如果我不使用MD5,那么什么更好?比如SHA-256?2-在我使用SSL传输密码和用户名之前,我是否需要加密散列数据,然后使用SSL或仅使用SSL?3-我如何知道,哪节课是给谁的。我应该使用会话ID还是?为什么我看到一些网站,在我登录后,cookie中有SessionID?如果你使用SSL,你不需要散列任何东西。如果我破解SSL加密,散列将很容易撤销。存储密码散列时,请使用具有大量位的散列(如SHA-256或更好)。您永远不需要知道会话ID是什么。服务器会自动为您隔离会话。当您使用$\u会话时,它是当前用户的会话。非常清楚,谢谢@Answers\u Seeker。我还有一个关于sessionId的问题,1-服务器收到hased密码,然后再次散列,然后将其存储到数据库?两次散列?2-我应该使用什么信息生成SessionID?