在dataV的iframe组件,嵌入本地部署的http网站

1.首先在datav里插入iframe组件,并且填写你的http网站url

                 

2.首先我们的网站如果是http头,那么就存在一个安全问题。‌这是浏览器的安全策略限制,有两种办法解决:

1.将HTTP资源转换为HTTPS‌:最直接的解决方法是将所有的HTTP资源转换为HTTPS。这可以通过配置服务器或使用代理服务器来实现。例如,可以使用nginx等服务器软件,通过SSL模块将HTTP资源包装成HTTPS资源‌34。‌

2.修改浏览器设置‌:在某些情况下,可以通过修改浏览器设置来允许HTTPS页面嵌入HTTP资源。例如,在Chrome浏览器中,可以在设置中允许不安全的内容加载。具体操作是进入“设置 - 隐私设置和安全性 - 网站设置 - 不安全问题”,然后将HTTPS页面域名和HTTP页面的域名都添加进去‌。

        转换https大部分需要花钱,我们这里先选择第二种。需要打开浏览器的设置,在网站权限这里添加让datav网站允许不安全内容,不然iframe里不会显示我们的网站而是一直透明。

        设置好之后就能看到画面了。但是登录的时候,一直跳转根目录,无法进入登陆后的用户界面,开发者控制台一直显示无法携带数据重定向,这是因为没有读取到cookie数据。

        

        点开cookie可以看到网页有7个cookie在使用,但是点进去详情,正在被使用的只有阿里云的cookie。

  

        说明我们嵌入的网站的cookie没有被使用,这是因为:Cookie实际上是一小段的文本信息,是服务器发送到用户浏览器并保存在本地的一小块数据。后面如果你使用了cookie来传输用户数据的话,因为阿里云的父页面不允许子页面的cookie传递(跨域限制、同源限制),所以不能使用cookie。

3.改成使用session保存数据,然后利用URL重写,可以通过response.encodeURL(url) 进行实现, 将SessionID拼接到访问地址后来传递用户信息。
什么是跨域问题:https://help.aliyun.com/zh/datav/datav-6-0/user-guide/how-to-configure-cross-domain-data?spm=a2c4g.11186623.help-menu-43570.d_2_7_6_2.2c863f4cvOdUIL&scm=20140722.H_64140._.OR_help-T_cn#DAS#zh-V_1

Cookie 、Session、localstorage、Sessionstorage的区别:

Cookie 、Session、localstorage、Sessionstorage的区别_cookie localstorage session区别-优快云博客

在python(python3.8以上)代码里添加session会话和url重写函数。

前端的js(我是node v18.0.0以上)的fetch修改成fetchWithSession

session.py:

from datetime import datetime
import uuid
from config import get_db
from flask import current_app
import re

class SessionManager:
    def __init__(self):
        self.db = get_db('config')
        self.collection = self.db.sessions
        
    def create_session(self, user_data):
        """创建新会话"""
        session_id = str(uuid.uuid4())
        session_data = {
            'session_id': session_id,
            'user_data': user_data,
            'created_at': datetime.now()
        }
        self.collection.insert_one(session_data)
        return session_id
        
    def get_session(self, session_id):
        """获取会话数据"""
        if not session_id:
            print("No session ID provided")  # 调试日志
            return None
        
        session = self.collection.find_one({'session_id': session_id})
        print(f"Found session: {session}")  # 调试日志
        return session
        
    def update_session(self, session_id, user_data):
        """更新会话数据"""
        self.collection.update_one(
            {'session_id': session_id},
            {'$set': {'user_data': user_data}}
        )
        
    def delete_session(self, session_id):
        """删除会话"""
        self.collection.delete_one({'session_id': session_id})

def encode_url(url, session_id):
    """URL重写,添加session_id"""
    if not session_id:
        print(f"Warning: No session ID provided for URL: {url}")  # 调试日志
        return url
        
    # 移除任何现有的sid参数
    cleaned_url = re.sub(r'[?&]sid=[^&]+', '', url)
    print(f"Cleaned URL: {cleaned_url}")  # 调试日志
    
    # 始终使用查询字符串格式
    separator = '&' if '?' in cleaned_url else '?'
    final_url = f'{cleaned_url}{separator}sid={session_id}'
    
    print(f"Final encoded URL: {final_url}")  # 调试日志
    return final_url 

app.py部分代码:

#用户登录后
@app.route('/<username>')
def index(username=None):
    session_id = request.args.get('sid')
    session_data = session_manager.get_session(session_id)
    current_username = session_data['user_data']['username'] if session_data and session_data.get('user_data') else None
    
    # 如果没有提供用户名但已登录,重定向到带用户名的URL
    if not username and current_username:
        return redirect(encode_url(url_for('index', username=current_username), session_id))
        
    # 如果提供了用户名,验证是否匹配当前登录用户
    if username and username != current_username:
        return redirect(encode_url(url_for('登陆页面'), session_id))
        
    return render_template('你的用户界面.html')

后面修改你的前端代码和路由,都改成使用系统环境的session,就可以使用了。
网站登陆后的url变成:

希望对你有帮助,博主后面会更新如何在阿里云配置服务器,实现不同主机访问登录我们的http网址。可以期待一下,嘻嘻。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值