mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-09-17 08:46:40 +08:00
386 lines
26 KiB
HTML
386 lines
26 KiB
HTML
<!DOCTYPE html>
|
||
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
|
||
<link rel="icon" href="/static/favicon.png">
|
||
<title>28 你怎么证明你就是你 - 身份验证和访问控制.md.html</title>
|
||
<!-- Spectre.css framework -->
|
||
<link rel="stylesheet" href="/static/index.css">
|
||
<!-- theme css & js -->
|
||
<meta name="generator" content="Hexo 4.2.0">
|
||
</head>
|
||
|
||
<body>
|
||
|
||
<div class="book-container">
|
||
<div class="book-sidebar">
|
||
<div class="book-brand">
|
||
<a href="/">
|
||
<img src="/static/favicon.png">
|
||
<span>技术文章摘抄</span>
|
||
</a>
|
||
</div>
|
||
<div class="book-menu uncollapsible">
|
||
<ul class="uncollapsible">
|
||
<li><a href="/" class="current-tab">首页</a></li>
|
||
</ul>
|
||
|
||
<ul class="uncollapsible">
|
||
<li><a href="../">上一级</a></li>
|
||
</ul>
|
||
|
||
<ul class="uncollapsible">
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/01 我应该站在谁的肩膀上 - OSI vs TCPIP模型.md.html">01 我应该站在谁的肩膀上 - OSI vs TCPIP模型.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/02 万丈高楼平地起- 物理层 + 数据链路层.md.html">02 万丈高楼平地起- 物理层 + 数据链路层.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/03 OSI的灵魂就是我 - 网络层.md.html">03 OSI的灵魂就是我 - 网络层.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/04 要快还是要稳你说好了 - 传输层.md.html">04 要快还是要稳你说好了 - 传输层.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/05 是时候展现真正的技术了 - 应用层.md.html">05 是时候展现真正的技术了 - 应用层.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/06 重回小学课堂 - 二进制101.md.html">06 重回小学课堂 - 二进制101.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/07 1+1 = 2吗? - 二进制的计算.md.html">07 1+1 = 2吗? - 二进制的计算.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/08 16进制又是个什么鬼? - 16进制的讲解.md.html">08 16进制又是个什么鬼? - 16进制的讲解.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/09 我想有个家 - 什么是IP地址.md.html">09 我想有个家 - 什么是IP地址.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/10 我可是住二环的人 - IP地址的组成和分类.md.html">10 我可是住二环的人 - IP地址的组成和分类.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/11 我已经没地方住了吗 - IPv6.md.html">11 我已经没地方住了吗 - IPv6.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/12 向左还是向右 - IP路由.md.html">12 向左还是向右 - IP路由.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/13 我能给你安全感 - TCP(一).md.html">13 我能给你安全感 - TCP(一).md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/14 我那不为人知的秘密是什么 - TCP(二).md.html">14 我那不为人知的秘密是什么 - TCP(二).md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/15 不问收没收到,就问快不快 - UDP.md.html">15 不问收没收到,就问快不快 - UDP.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/16 我为什么与众不同 - TCP高级篇(拥塞模型).md.html">16 我为什么与众不同 - TCP高级篇(拥塞模型).md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/17 来,先看看我的家谱 - HTTP的身世.md.html">17 来,先看看我的家谱 - HTTP的身世.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md.html">18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/19 我老了,让我儿子来吧 - HTTP2.md.html">19 我老了,让我儿子来吧 - HTTP2.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/20 稳重的大外甥 - HTTPS.md.html">20 稳重的大外甥 - HTTPS.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/21 HTTP的高级篇 - HTTPClient(Java).md.html">21 HTTP的高级篇 - HTTPClient(Java).md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/22 想来我家,你自己查呀 - DNS.md.html">22 想来我家,你自己查呀 - DNS.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/23 来的早,不如来得巧 - NAT.md.html">23 来的早,不如来得巧 - NAT.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/24 辛苦的邮政 - SMTP.md.html">24 辛苦的邮政 - SMTP.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/25 你就是看不见我 - VPN.md.html">25 你就是看不见我 - VPN.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/26 黑客的好帮手 - SSH.md.html">26 黑客的好帮手 - SSH.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html">27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
<a class="current-tab" href="/专栏/全解网络协议/28 你怎么证明你就是你 - 身份验证和访问控制.md.html">28 你怎么证明你就是你 - 身份验证和访问控制.md.html</a>
|
||
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html">29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/30 我要怎么藏好我的考研资料 - 网络攻击(二).md.html">30 我要怎么藏好我的考研资料 - 网络攻击(二).md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/31 如何保护我的考研资料 - 网络攻击防范.md.html">31 如何保护我的考研资料 - 网络攻击防范.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/32 Linux网络安全 - 安全实战.md.html">32 Linux网络安全 - 安全实战.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a href="/专栏/全解网络协议/33 结语.md.html">33 结语.md.html</a>
|
||
|
||
</li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
|
||
<div class="sidebar-toggle-inner"></div>
|
||
</div>
|
||
|
||
<script>
|
||
function add_inner() {
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
inner.classList.add('show')
|
||
}
|
||
|
||
function remove_inner() {
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
inner.classList.remove('show')
|
||
}
|
||
|
||
function sidebar_toggle() {
|
||
let sidebar_toggle = document.querySelector('.sidebar-toggle')
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
let content = document.querySelector('.off-canvas-content')
|
||
if (sidebar_toggle.classList.contains('extend')) { // show
|
||
sidebar_toggle.classList.remove('extend')
|
||
sidebar.classList.remove('hide')
|
||
content.classList.remove('extend')
|
||
} else { // hide
|
||
sidebar_toggle.classList.add('extend')
|
||
sidebar.classList.add('hide')
|
||
content.classList.add('extend')
|
||
}
|
||
}
|
||
|
||
|
||
function open_sidebar() {
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
sidebar.classList.add('show')
|
||
overlay.classList.add('show')
|
||
}
|
||
function hide_canvas() {
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
sidebar.classList.remove('show')
|
||
overlay.classList.remove('show')
|
||
}
|
||
|
||
</script>
|
||
|
||
<div class="off-canvas-content">
|
||
<div class="columns">
|
||
<div class="column col-12 col-lg-12">
|
||
<div class="book-navbar">
|
||
<!-- For Responsive Layout -->
|
||
<header class="navbar">
|
||
<section class="navbar-section">
|
||
<a onclick="open_sidebar()">
|
||
<i class="icon icon-menu"></i>
|
||
</a>
|
||
</section>
|
||
</header>
|
||
</div>
|
||
<div class="book-content" style="max-width: 960px; margin: 0 auto;
|
||
overflow-x: auto;
|
||
overflow-y: hidden;">
|
||
<div class="book-post">
|
||
<p id="tip" align="center"></p>
|
||
<div><h1>28 你怎么证明你就是你 - 身份验证和访问控制</h1>
|
||
<h5>AAA</h5>
|
||
<p>我们先从AAA开始(你一定很迷惑,什么是AAA)英文就是(authentication, authorization, and accounting)- 身份验证,授权和审计。我们先来看一下身份验证部分。</p>
|
||
<ol>
|
||
<li>身份验证就是你的用户名和密码。你输入用户名和密码以后,以此来获得进入的权限。没有此处的第二个组件,用户名和密码显得有一点毫无意义那就是 - 授权</li>
|
||
<li>授权就是你的特权和访问权限。换句话说,也就是在你登入的系统中,你可以访问哪些软件,你可以访问哪些文件共享,你可以访问哪些计算机和服务器?因此,你的用户名和密码与授权信息是相关联的,从而告诉你可以访问的内容。</li>
|
||
<li>从审计的角度来看,这里的最后一个组件很重要,你试想一下,如果出现问题,我们需要对问题进行故障排除,比如员工有没有按照预期的方式行事,我们会去将审查谁在何时何地做了什么;这就是这里的审计部分。</li>
|
||
</ol>
|
||
<p>所以我们有了身份验证,那就是我们的用户名和密码;授权,该用户有权访问什么;最后是审计,该用户做了什么,他们什么时候做的?因此,AAA身份验证就是这样。它是用户名,访问权限以及它们所做的记录。有两个组织支持在现代网络中使用的AAA服务器。思科是其中之一。它称为(Terminal Access Controller Accesses-Control System Plus)- “终端访问控制器访问控制系统Plus”或简称为TACACS。</p>
|
||
<h5>身份验证</h5>
|
||
<p>我们在这里来对身份验证进行一下深度研究。有本地身份验证,可以在其中对工作站本身进行身份验证。在家用设备中,如果你在家中有一台计算机或笔记本电脑,你最有可能通过无线网络将其连接到Internet,但是你可能没有要连接到服务器。此处的本地身份验证只是用户名和密码,使你可以直接在本地计算机上访问资源。一般会被分为两类-管理员和普通用户。与管理员相比,通常普通用户只是具有查看的权限,而管理员具有在工作站上配置的权限,尤其是对配置文件(这个很好理解,不需要解释呀)。</p>
|
||
<p>本地的身份验证只适用于用于本地工作站本身(比如你电脑的登录,输入的用户名和密码只是针对你的笔记本)。域名(Domain)身份验证意味着我们将登录一台要加入某种Domain的计算机。通常是使用Active Directory,这意味着我们将用户名和密码发送到domain控制器。然后,域控制器会将我们的设备添加到该domain中。当我们将设备连接到域控制器时,我们将使用称为Kerberos的协议来做(该Kerberos协议是开源的),由MIT及其包括IETF的联盟开发。 Kerberos所做的是对通信进行某种加密,以便当我们向服务器发送用户名和密码时,对通信进行加密,这就是这里的组成部分之一。另一个组件是确保发送用户名和密码的计算机是他自己,而不是在该网上其他试图假冒该设备的其他设备。因为这里可以进行某些类型的中间人攻击,即侦听设备和服务器的通信,然后稍后将通信重播回服务器,以欺骗服务器。Kerberos是服务器和客户端验证其身份的一种方式。除此之外,它还会加密该通信,以允许该用户名和密码成功到达服务器,对其进行验证,以查看是否允许该设备加入domain。</p>
|
||
<p>当你需要使用域身份验证时,或者是你早上准备开始工作了,打开你的电脑,输入用户名和密码来登录。这将与域控制器进行核对,以验证你是谁,并允许你登录并访问设备上的应用程序。现在,假设你在会计部门工作,并且需要使用一些会计软件比如QuickBook,并且这个软件的依赖位于我们数据中心中的服务器。这里的问题是,在大型公司,你每天都会使用很多不同的程序。你可能有一个内部网站和电邮。你可能会使用特定的专业软件,例如刚才提到的Quickbook,你可能还会使用某些绘图软件等等。可能需要使用许多很多软件(大公司就是有钱,全是买license)。这些软件中的大多数都将具有某种身份验证系统,要确保只有你才能使用该软件,该软件会阻止那些很熟练的程序员或其他工种,但是不是会计的人。这就是术业有专攻,你不是会计,不要动我的软件。因此,我们一般会使用一种叫做LDAP的东西。现在,LDAP已内置到Microsoft Server系统(特别是Active Directory)中,它允许我们执行的操作是允许我们将用户名和密码发送到我们的比如会计软件。然后,这个软件服务器会说“嘿,Active Directory”,该用户是否有权使用这个软件?如果是的话,说明此用户已被授权,然后该用户就可以登录到这个会计软件。</p>
|
||
<p>以上的例子其实很接近于所谓的单点登录(现在单点登录很火呀)。单点登录是一个很重要的概念,因为这意味着我只需要知道一个用户名和密码。这就和你的个人生活有一点不同,比如在我的个人生活中,我需要我的Gmail帐户密码,我的netflix的帐户密码,我的Facebook帐户密码,我的HBO账户,我的银行账户等等。对于所有不同的系统,我都需要所有不同的用户名和密码(你可以一个密码走天下,但是会不安全),并且没有一种很好的方法将它们统一在一起。 Facebook和Google对其单点登录产品进行了一些尝试,但是效果不是那么好。可是当我们在企业中使用时,效果就不一样了。用户只需要知道一个用户名和密码,就会感到非常满意。此外,它还提供了无与伦比的安全性,因为你不再被迫去创建许多密码,并且还需要记住许多不同的用户名和密码的组合。</p>
|
||
<p>你想一下这里是不是有一个小问题,那就是假设用户名和密码遭到泄露,是不是意味着拥有该用户名和密码的任何人都可以将设备加入网络中的domain,这样会不会危险。因此,我们可以采取的预防措施之一是向网络上的设备颁发证书。在设备联机时可以通过将证书的一部分发送到域控制器来验证它是否属于这个domain(我喜欢用英文单词在这里,中文的翻译总感觉有一点点变扭)。域控制器可能说,是的,此设备在我们的网络上有效,是自己人,放进来把。这比仅使用用户名和密码来使设备加入Active Directory域要好一些,因为现在Active Directory域控制器必须专门为我们要加入domain的设备颁发证书。因此,我们使用证书和一些凭据在此处登录。这将防止有人携带自己的设备并将其加入domain。这就好比什么呢?比如说天地会的密码是”天王盖地虎,宝塔镇河妖“,是不是每一个知道这个口号的人都是自己人呢?不一定吧。你只要偷听到了就会知道,但是你有一个证书,上面陪着你的照片,这样是不是就不好蒙混过关了(可能有同学会说这样还是有漏洞,不要抬扛呀,任何软件和方案都有安全问题,只要你钻研,都能攻克,只是简单和难得区别)。我们通常会为无线设备使用基于证书的身份验证。这也确实非常有效。</p>
|
||
<h3>日志和审核</h3>
|
||
<p>在AAA中,最后一个就是审核,日志是属于审核的一部分。我们需要记录所有的traffic,这使我们可以在将来审核这部分。美国有一个法律那就是关于美国健康法的一部分是,医疗记录系统的用户不得查看不在其直接护理下的任何患者的健康信息。比如你在医院工作,发现蔡x坤是你的病人,你有接触病历软件的权限,你可能想了解阿坤怎么了。可能是出于好奇。可能希望将该信息出售给某家机构来引起轰动。所以,如果让你来设计这个审核来防止这种情况发生,你怎么做呢?设计目的是使我们能够准确的记录谁在何时何地做了什么;然后出现问题的时候,可以审核然后说,那个人这样做是对的吗?</p>
|
||
<h3>多因素身份验证</h3>
|
||
<p>我前面应该有提到过这个,我们现在来细谈一下多因素身份验证。现在是我们有史以来第一次能够真正实现多因素身份验证的年代。尽管仍然存在很多挑战,但比以前要好很多很多。多因素身份验证,这个想法是收集有关你的东西,与你有关的东西。因此,我们在这里需要做的一件事情是,你知道的事情,你拥有的一些东西,你是谁,你在哪,你在做什么。让我们看一下其中的例子。所以你知道的事情在这里可以是你的用户名。自定义ID一般会是你的电邮地址,因为用户名通常是你的用户名,而电邮地址一般都是公开的。所以,公司不希望你的用户名成为唯一的标准,这就是为什么我们还需要添加密码。因此,你拥有或者说知道用户名和密码,这就是我们对用户名和密码的单因素身份验证。这是我们知道的东西。我们可以通过添加我们拥有的东西来增强它。我们使用了一些我们知道的东西,例如用户名密码,我们还可以添加一些我们有的东西,比如钥匙卡,钥匙扣,某种类型的数字生成器,甚至可以是我们的智能手机。因此,我们在这里所要做的就是输入用户名和密码,然后可能还要刷智能卡。在银行工作的同学可能会知道,员工会得到一些小的安全身份证,这是一个随机生成数字的小设备。因此,每隔30秒左右会弹出一个新号码,然后你将使用该号码以及用户名和密码来在系统中进行身份验证。因为生成的数字有些随机,很难预测。我们也可以使用智能手机来做同样的事情。还记得我前面提到的一个App(Authenticator)。当我们要登录到系统时,我们可以请求我们的代码登录。然后,我们登录到系统中,可以输入我们的用户名,密码,然后还有就是这个App里的一个数字。这里的想法是你的用户名和密码就是你所知道的。如果有人出于某种原因得到了这些密码,也许你写下了你的用户名和密码,然后又有人从你那里偷了密码,则可以使用第三种身份验证方式。</p>
|
||
<p>因此,窃取你信息的人将无法登录,除非他们有此第三因素。我们可以在这里使用的另一种东西就是你自己。这可能很简单,例如指纹,脸部扫描,视网膜扫描,手掌扫描。通常,这将是某种生物特征识别,而你很难复制给其他人。因此,也许你会再次输入用户名,密码和指纹。智能手机使用指纹读取器。有时,指纹读取器仅用作身份验证的一种形式。这有点危险,因为如果有人可以访问我的指纹并能够复制它,那么他们实际上可以在我的手机上进行身份验证。但是手机上还有其他应用程序需要更多,并且还需要用户名,密码和指纹才能进入。这里的另一个因素是你所在的地方。我马上想到的一个例子就是这项技术,我知道苹果称之为HomeKit。你可以做的就是在你要为自己做某事的地方使用它,比如你在自己的家中,你可以使用智能手机打开锁。这里是不需要用户名和密码的。从字面上看,它将只是在你所处的某个地方,你所拥有的某个事物以及你是谁。可以你你在家附近,拥有你的智能手机,并将指纹放在智能手机上。然后,这三件事加在一起就可以解锁你的房门。因此,在某个地方,您可以将自己拥有的东西和自己所有的东西结合起来使用,例如做一些事情,例如打开房屋的门,或者在回家后打开室内的灯。</p>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div style="float: left">
|
||
<a href="/专栏/全解网络协议/27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html">上一页</a>
|
||
</div>
|
||
<div style="float: right">
|
||
<a href="/专栏/全解网络协议/29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html">下一页</a>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
|
||
</div>
|
||
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"7099765bff413cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
|
||
</body>
|
||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
|
||
function gtag() {
|
||
dataLayer.push(arguments);
|
||
}
|
||
|
||
gtag('js', new Date());
|
||
gtag('config', 'G-NPSEEVD756');
|
||
var path = window.location.pathname
|
||
var cookie = getCookie("lastPath");
|
||
console.log(path)
|
||
if (path.replace("/", "") === "") {
|
||
if (cookie.replace("/", "") !== "") {
|
||
console.log(cookie)
|
||
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
|
||
}
|
||
} else {
|
||
setCookie("lastPath", path)
|
||
}
|
||
|
||
function setCookie(cname, cvalue) {
|
||
var d = new Date();
|
||
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
|
||
var expires = "expires=" + d.toGMTString();
|
||
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
|
||
}
|
||
|
||
function getCookie(cname) {
|
||
var name = cname + "=";
|
||
var ca = document.cookie.split(';');
|
||
for (var i = 0; i < ca.length; i++) {
|
||
var c = ca[i].trim();
|
||
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
|
||
}
|
||
return "";
|
||
}
|
||
|
||
</script>
|
||
|
||
</html>
|