session,cookie,url传递的优缺点以及示例代码

URL传递、Cookie传递和Session传递都是常见的Web开发中用于传递数据的方式。它们各自有自己的优缺点,下面是它们的一些特点和适用场景:

 

URL传递:

  • 优点:简单易用,不需要特殊技术,只需要使用URL即可传递数据;可以将数据传递给不同域名的页面,实现跨域传递数据。
  • 缺点:URL中的参数有长度限制,一般为2KB左右,传递大量数据时不太适用;URL中的参数会显示在地址栏中,存在安全隐患。 适用场景:传递小量的数据,如页面之间的参数传递、搜索关键词等。

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTML1</title>
</head>
<body>
    <h1>Welcome to HTML1!</h1>
    <form method="get" action="receive.html">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name">
        <input type="submit" value="Submit">
    </form>
    <script>
        // 获取表单元素和输入框元素
        const form = document.querySelector('form');
        const input = document.querySelector('#name');
 
        // 在表单提交时将数据拼接到URL中
        form.addEventListener('submit', (event) => {
            event.preventDefault();
            const url = new URL(form.action);
            url.searchParams.set('name', input.value);
            window.location.href = url.toString();
        });
    </script>
</body>
</html>

 receive.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTML2</title>
</head>
<body>
    <h1>Welcome to HTML2!</h1>
    <p>Name: <span id="name"></span></p>
    <script>
        // 获取URL中的参数
        const params = new URLSearchParams(window.location.search);
        const name = params.get('name');
        // 将数据渲染到页面上
        document.getElementById('name').textContent = name;
    </script>
</body>
</html>

Cookie传递:

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTML1</title>
</head>
<body>
    <h1>Welcome to HTML1!</h1>
    <form method="post" action="receive.html">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name">
        <input type="submit" value="Submit">
    </form>
    <script>
        // 获取表单元素和输入框元素
        const form = document.querySelector('form');
        const input = document.querySelector('#name');
 
        // 在表单提交时将数据保存到cookie中
        form.addEventListener('submit', (event) => {
            event.preventDefault();
            document.cookie = `name=${input.value}`;
            form.submit();
        });
    </script>
</body>
</html>

 receive.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTML2</title>
</head>
<body>
    <h1>Welcome to HTML2!</h1>
    <p>Name: <span id="name"></span></p>
    <script>
        // 获取cookie中的数据
        const cookies = document.cookie.split(';');
        let name = '';
        for (let cookie of cookies) {
            cookie = cookie.trim();
            if (cookie.startsWith('name=')) {
                name = cookie.substring(5);
                break;
            }
        }
        // 将数据渲染到页面上
        document.getElementById('name').textContent = name;
    </script>
</body>
</html>

  • 优点:可以存储大量数据,一般有4KB的存储空间;可以设置Cookie的有效期,长期保存数据;可以在客户端存储数据,减轻服务器的负担。
  • 缺点:Cookie的存储和传输都需要消耗带宽和时间,会影响网络性能;Cookie中的数据可以被篡改或窃取,存在安全隐患。 适用场景:需要长期存储数据,如用户登录状态、购物车等。

Session传递:

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTML1</title>
</head>
<body>
    <h1>Welcome to HTML1!</h1>
    <form method="post" action="receive.html">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name">
        <input type="submit" value="Submit">
    </form>
    <script>
        // 获取表单元素和输入框元素
        const form = document.querySelector('form');
        const input = document.querySelector('#name');
        // 在表单提交时将数据保存到sessionStorage中
        form.addEventListener('submit', (event) => {
            event.preventDefault();
            sessionStorage.setItem('name', input.value);
            form.submit();
        });
    </script>
</body>
</html>

 receive.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTML2</title>
</head>
<body>
    <h1>Welcome to HTML2!</h1>
    <p>Name: <span id="name"></span></p>
    <script>
        // 获取session中的数据
        const name = sessionStorage.getItem('name');
        // 将数据渲染到页面上
        document.getElementById('name').textContent = name;
    </script>
</body>
</html>

  • 优点:可以存储大量数据,不受URL长度限制;可以设置Session的有效期,长期保存数据;数据只存储在服务器端,相对较安全。
  • 缺点:Session的存储需要占用服务器的内存和计算资源,对服务器的性能有一定的影响;无法在客户端进行存储,可能会影响客户端的响应速度。 适用场景:需要长期存储数据,且需要保密性较高的数据,如用户登录状态、用户个人资料等。 总之,选择哪种方式传递数据,需要根据具体的需求和场景进行选择,权衡各种因素后再做决策。

猜你喜欢

转载自blog.csdn.net/long_songs/article/details/129833617