Php 如何在注销后保存喜爱的图像,并在登录后仍能看到它们?

Php 如何在注销后保存喜爱的图像,并在登录后仍能看到它们?,php,session,cookies,session-cookies,Php,Session,Cookies,Session Cookies,问题: 因此,当我登录时,用户可以转到browse.php将图像添加到favorites.php,照片将显示在该页面上 当我注销并重新登录时,图像将消失(未保存) 问题: 在我注销后如何保存它,以便下次登录时,我可以使用cookie或其他方法查看特定用户最喜爱的图像(因为不允许我使用数据库) 我的收藏夹页面 <?php session_start(); require_once 'favoritesfunction.php'; if (isset($_GET["fileName&

问题:

因此,当我登录时,用户可以转到browse.php将图像添加到favorites.php,照片将显示在该页面上

当我注销并重新登录时,图像将消失(未保存)

问题:

在我注销后如何保存它,以便下次登录时,我可以使用cookie或其他方法查看特定用户最喜爱的图像(因为不允许我使用数据库)

我的收藏夹页面

<?php
session_start();
require_once 'favoritesfunction.php';
if (isset($_GET["fileName"])) {
    $fileName = $_GET["fileName"];
    addToFavorites($fileName);
}
?>
<!DOCTYPE html>
<html>

<head>
    <?php
    $title = "Travel Photos - View Favorites";
    ?>
    <link rel="stylesheet" href="viewfavorites.css" />
</head>

<body>

    <main class="container">
        <h1 class="favheader">Favorites</h1>

        <div class="content">
            <?php
            if (isset($_SESSION['favorites']) && isset($_SESSION['email'])) {
                $favorites = $_SESSION['favorites'];
                if (count($favorites) > 0) {
                    ?> <ul class="ul-favorite"> <?php
                        foreach ($favorites as $f) {
                            echo '<img class="displayPic" src="https://storage.googleapis.com/assignment1_web2/square150/' . $f . '">';
                            }
                            ?>
                    </ul>
                    <p id="removeall"><button class="button"><span><a target="" href="services/removefavorites.php?remove=all">Remove All</a></span></button></p>
                <?php
                    }
                } else {

                    ?>
                <div class="nofavorites">
                    <p>No favorites found.</p>
                </div>
            <?php
            }
            ?>
        </div>
    </main>


</body>
<script type="text/javascript" src="main.js"></script>

</html>

最爱

没有找到收藏夹

我的添加到收藏夹功能php

<?php

function addToFavorites($fileName)
{

    //Checks if the session favorites exists
    if (isset($_SESSION['favorites'])) {
        $favorites = $_SESSION['favorites'];
    } else {
        $favorites = array();
        $_SESSION['favorites'] = $favorites;
    }


    // add item to favourites
    $item = $fileName;
    $match = false;

    //Loop below checks for duplicates
    $i = 0;
    while ($i < count($favorites)) {
        if ($favorites[$i] == $item) {
            $favorites[$i] = $item;
            $match = true;
        }
        $i++;
    }

    //if match equals false, that means its not in the favorites list of the user
    //so it is added to the user's favorites array
    if ($match == false) {
        $favorites[] = $item;
    }
    $_SESSION['favorites'] = $favorites;



    $_SESSION['favorites'] = $favorites;
} 

不应将
$favorites
保存到会话中,而应将该信息写入持久数据存储。MySQL可能是最流行的,但是您可以使用任何可以处理持久存储的东西。当用户注销时,php通过删除会话cookie文件及其所有数据来完成此操作。因此,当您的用户将图像添加到收藏夹时,请将这些数组元素中的每一个都放在一个表中,该表的用户id带有一个外键。然后,当用户登录时,基于相同的用户id读回该信息。使用cookie或JScookie@AlexBarker是的,我知道这将是最简单的,但我的教授说我不能使用数据库来存储,必须使用Cookies,请遵循@Diegoponiano提供的示例。您需要使用浏览器cookie,而不是服务器端“会话”cookie。我知道,一开始有点困惑。不,不。你用$\u COOKIE而不是$\u SESSION。Cookie通过web浏览器存储在计算机上,会话存储在服务器上。会话还使用浏览器中的cookie来标识存储在服务器上的信息。总之,$\u COOKIE将向bowser写入数据,$\u会话将向服务器写入数据。注销将销毁服务器端数据,但不会销毁客户端$\u COOKIE。您应该将该信息写入持久数据存储,而不是将
$favorites
保存到会话中。MySQL可能是最流行的,但是您可以使用任何可以处理持久存储的东西。当用户注销时,php通过删除会话cookie文件及其所有数据来完成此操作。因此,当您的用户将图像添加到收藏夹时,请将这些数组元素中的每一个都放在一个表中,该表的用户id带有一个外键。然后,当用户登录时,基于相同的用户id读回该信息。使用cookie或JScookie@AlexBarker是的,我知道这将是最简单的,但我的教授说我不能使用数据库来存储,必须使用Cookies,请遵循@Diegoponiano提供的示例。您需要使用浏览器cookie,而不是服务器端“会话”cookie。我知道,一开始有点困惑。不,不。你用$\u COOKIE而不是$\u SESSION。Cookie通过web浏览器存储在计算机上,会话存储在服务器上。会话还使用浏览器中的cookie来标识存储在服务器上的信息。总之,$\u COOKIE将向bowser写入数据,$\u会话将向服务器写入数据。注销将销毁服务器端数据,但不会销毁客户端$\u COOKIE。