You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron调用session时报Cannot read properties of undefined (reading 'session')错误如何解决

问题根因

session是Electron主进程专属API,无法在渲染进程上下文中直接调用,你在渲染进程代码里直接引入session必然返回undefined,触发该类型错误。

具体解决方案

1. 主进程代码配置

在主进程入口(通常为main.js)中监听IPC事件,处理cookie写入逻辑:

const { app, session, ipcMain } = require('electron')
const path = require('path')

// 必须等待app ready后再操作session
app.whenReady().then(() => {
  // 监听渲染进程发送的设置cookie请求
  ipcMain.handle('set-cookie', async (event, cookieParams) => {
    try {
      // 注意url必须是完整路径,不能用相对路径,此处示例为file协议加载本地文件的场景
      const baseUrl = `file://${path.resolve(__dirname, './')}`
      await session.defaultSession.cookies.set({
        url: baseUrl,
        ...cookieParams
      })
      return { success: true }
    } catch (err) {
      return { success: false, error: err.message }
    }
  })

  // 此处保留你原有创建窗口等业务逻辑
  // ...
})

2. 预加载脚本(preload.js)配置

Electron 12+默认开启上下文隔离,需要通过预加载脚本向渲染进程暴露安全的IPC调用接口:

const { contextBridge, ipcRenderer } = require('electron')

contextBridge.exposeInMainWorld('electronAPI', {
  setCookie: (cookieParams) => ipcRenderer.invoke('set-cookie', cookieParams),
  sendUpdatePatientWindow: () => ipcRenderer.send('updatePatientWindow')
})

创建窗口时要指定对应预加载脚本:

// 主进程创建窗口的代码示例
const mainWindow = new BrowserWindow({
  webPreferences: {
    preload: path.join(__dirname, 'preload.js'),
    // 不要关闭上下文隔离、不要开启nodeIntegration,避免安全问题
    contextIsolation: true,
    nodeIntegration: false
  }
})

3. 渲染进程代码修改

调整原有渲染进程代码,调用预加载脚本暴露的接口即可:

async function updatePatient(id) {
  // 调用接口设置cookie
  const result = await window.electronAPI.setCookie({
    name: 'patientId',
    value: id
  })
  if (result.success) {
    window.electronAPI.sendUpdatePatientWindow()
  } else {
    console.error('cookie设置失败:', result.error)
  }
}

updatePatient(id)
注意事项
  • 操作session.defaultSession必须等待app.whenReady()触发后执行,否则主进程也会出现session为undefined的问题
  • cookie的url参数必须和你应用加载页面的实际地址、协议完全匹配,否则设置的cookie不会生效
  • 不要为了方便关闭上下文隔离或开启nodeIntegration,会引入严重的安全风险

内容的提问来源于stack exchange,提问作者mvioole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:54:06