📜  如果我们删除一个站点的cookies,我们仍然可以登录而无需再次登录

📅  最后修改于: 2021-10-22 03:23:57             🧑  作者: Mango

facebook 是用PHP编码的, PHP是在 1994 年推出的。但是在PHP,有一个缺点,即如果我们禁用 cookie(比如在 Facebook 中),Facebook 服务器将忘记之前登录过的人,它会告诉我该应用程序首次启动时的页面。但是在Java (JEE 版,于 1999 年推出)中,我们有一种称为“URL 编码”的技术,即使在禁用 cookie 后,我们仍然可以使用该技术登录。因此,我们将通过编码向您展示这一点。

有两个视频可以描述它。

  • 视频 1 描述解决方案
  • 视频 2 描述解决方案

在第一个视频中,我们删除了 Facebook 的 cookie 并尝试重新登录。但是当该应用程序首次启动时,它重定向到我的页面。正如您在视频中看到的,我可以看到用户名和密码。当我们删除 cookie 时,服务器忘记了您是谁,并在该应用程序首次启动时将您重定向到该页面。

现在,我们将使用Java展示它。这是一个关于 hit-counter 的简单程序,从中我们将联系到 facebook 背后发生的事情。我们还将在此代码中看到修改。

<% @page contentType = "text/html" pageEncoding = "UTF-8" %>


    
    Session Counter

   
< % int count
    = 0;
HttpSession sess = request.getSession();
System.out.println("session object id is: " + sess.getId());
System.out.println("session object is new: " + sess.isNew());
String name = request.getParameter("btn");
if (name != null) {
    if (sess.getAttribute("countval") != null) {
          
        if (name.equals("Next")) {
            count = 
            Integer.parseInt((String)sess.getAttribute("countval")) + 1;
        }
        else {
            count = 
            Integer.parseInt((String)sess.getAttribute("countval")) - 1;
        }
    }
}
  
sess.setAttribute("countval", String.valueOf(count));
  
// String url="hitcount.jsp;jsessionid=" + sess.getId();
% > 

Count is : <%= count %>

   
// name of program is "hitcount"          

注意:由于这是一个servlet程序,因此我们需要一个应用服务器来运行它。在这里,我们将使用“Apache Tomcat”并将其与 Netbeans 连接。

Count is: 0  // The output in the chrome browser.

// In apache tomcat log window.
session object id is: 68EE34B33FCE6ACB8C1183A2FA8CCBBF

session object is new: true

我们第一次启动应用程序时的输出。

现在,假设我们增加或减少计数器的值,会话对象 id 将保持不变,但它是新用户吗?不,因此它会给我虚假。现在让我们看看递增计数器值时的输出。

Count is: 1

// Same alpha numeric string as above, because the
// server has identified me with the  help of cookies
session object id is: 68EE34B33FCE6ACB8C1183A2FA8CCBBF  
                                                         
session object is new: false

注意: Facebook 也会发生同样的事情。它将检查您是否是新用户。如果“If session object is new”为真,那么它会将您重定向到登录页面。否则,您的 facebook 页面将打开,您无需再次登录。

现在如果我们删除 hitcounter 的 cookie (本地主机:我的服务器名称)

注意:视频包含有关如何删除 cookie 的分步说明。
现在,当我们删除 localhost 的 cookie 并再次运行 hitcounter 程序时。服务器将忘记用户是谁,并会在该应用程序首次启动时重定向到该页面。
现在查看我们删除 localhost 的 cookie 时的输出。删除 cookie 后,无论我们按什么键(即递增或递减),我都会收到“Count is:0”,因为它是应用程序首次启动时的起始页面。

Count is: 0
 
session object id is: 7552ECB909E08330A345AF18915EE743

// Since we have delete cookies, the server will forget
// the previous user and will treat it as a new user.
// Therefore session object id is different from above
// and "session is new" giving true.
session object is new: true 

注意:当我们删除 facebook 的 cookie 时,我们会在第一次启动时重定向到该页面,并且可以看到用户名和密码。

在第二个视频中,根据我们的实际目的修改代码。即使我们删除了 cookie,我们仍然可以登录而无需再次登录。

<% @page contentType = "text/html" pageEncoding = "UTF-8" %>


    
     Session Counter

   
<% int count
    = 0;
HttpSession sess = request.getSession();
System.out.println("session object id is: " + sess.getId());
System.out.println("session object is new: " + sess.isNew());
String name = request.getParameter("btn");
  
if (name != null) {
    if (sess.getAttribute("countval") != null) {
        if (name.equals("Next")) {
            count = 
            Integer.parseInt((String)sess.getAttribute("countval")) + 1;
        }
        else {
            count = 
            Integer.parseInt((String)sess.getAttribute("countval")) - 1;
        }
    }
}
  
sess.setAttribute("countval", String.valueOf(count));
  
// By using "URL Encoding" method
String url = "hitcount.jsp;jsessionid=" + sess.getId();
%> 

Count is : <%= count %>

   
         

输出:

Count is: 0

session object id is: 74E551B3F2E36B74C09885DE6F2EFC67
session object is new: true

同样,如果我们增加值,请查看输出

Count is: 1

session object id is: 74E551B3F2E36B74C09885DE6F2EFC67
session object is new: false

真正的魔法现在来了。现在,我们将删除 localhost 的 cookie 并增加 count 的值。查看输出

Count is: 2

session object id is: 74E551B3F2E36B74C09885DE6F2EFC67
session object is new: false

现在,如果我们删除 cookie,服务器会将我标识为“会话对象是新的”,并返回 false。这是因为现在您的会话 ID 正在通过 URL 传递。这就是为什么它被命名为“URL 编码”。现在只需将其与 Facebook 联系起来。即使您删除了 cookie,您也无需再次登录,您的 Facebook 页面就会打开。