> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getpara.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Session Transfer

> Exporting Para sessions for server-side operations

export const Card = ({imgUrl, title, description, href, horizontal = false, newTab = false}) => {
  const [isHovered, setIsHovered] = useState(false);
  const handleClick = e => {
    e.preventDefault();
    if (newTab) {
      window.open(href, '_blank', 'noopener,noreferrer');
    } else {
      window.location.href = href;
    }
  };
  return <div className={`not-prose relative my-2 p-[1px] rounded-xl transition-all duration-300 ${isHovered ? 'bg-gradient-to-r from-[#FF4E00] to-[#874AE3]' : 'bg-gray-200'}`} onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)}>
      <a href={href} onClick={handleClick} className={`not-prose flex ${horizontal ? 'flex-row' : 'flex-col'} font-normal h-full bg-white overflow-hidden w-full cursor-pointer rounded-[11px] no-underline`}>
        {imgUrl && <div className={`relative overflow-hidden flex-shrink-0 ${horizontal ? 'w-[30%] rounded-l-[11px]' : 'w-full'}`} onClick={e => e.stopPropagation()}>
            <img src={imgUrl} alt={title} className="w-full h-full object-cover pointer-events-none select-none" draggable="false" />
            <div className="absolute inset-0 pointer-events-none" />
          </div>}
        <div className={`flex-grow px-6 py-5 ${horizontal ? 'w-[70%]' : 'w-full'} flex flex-col ${horizontal && imgUrl ? 'justify-center' : 'justify-start'}`}>
          {title && <h2 className="font-semibold text-base text-gray-800 m-0">{title}</h2>}
          {description && <div className={`font-normal text-gray-500 re leading-6 ${horizontal || !imgUrl ? 'mt-0' : 'mt-1'}`}>
              <p className="m-0 text-xs">{description}</p>
            </div>}
        </div>
      </a>
    </div>;
};

Learn how to securely transfer session state from your client application to your server for performing operations on behalf of authenticated users.

## Exporting Sessions for Server-Side Operations

Use `waitAndExportSession()` when you need to transfer an authenticated user's session state to your server.

```typescript theme={null}
const serializedSession = await para.waitAndExportSession();

await fetch("/api/import-session", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ session: serializedSession }),
});
```

<Info>
  `waitAndExportSession()` waits until the SDK has reached an authenticated state before exporting session data. Use it for client-to-server handoff flows immediately after login.
</Info>

<Warning>
  By default, the exported session includes signer data so your server can sign for the user. If your server needs to sign messages or transactions, do not use `excludeSigners`.
</Warning>

If the server only needs to validate the user's session and does not need signing capabilities, export without signer data:

```typescript theme={null}
const sessionWithoutSigners = await para.waitAndExportSession({
  excludeSigners: true,
});
```

## Importing Sessions

For cases where you need to import a previously exported session back into a Para client instance:

<MethodDocs
  defaultExpanded={true}
  preventCollapse={true}
  name="importSession()"
  description="Imports session data."
  async={true}
  parameters={[
{
  name: "session",
  type: "string",
  required: true
}
]}
/>

```typescript theme={null}
const para = new Para(apiKey);

await para.importSession(exportedSessionString);

const isActive = await para.isSessionActive();
```

<Note>
  A Para instance can hold one active session at a time. On the server, create a fresh `ParaServer` instance for each imported user session.
</Note>

## Server-Side Implementation

To learn more about handling sessions on the server, check out the following guide:

<Card horizontal title="Server-Side Session Management" imgUrl="/images/v2/general-server.png" href="/v2/server/guides/sessions" description="Learn how to manage Para sessions on your server." />

## Best Practices

* **Export for the operation you need**: Include signer data only when your server will sign for the user.
* **Secure transmission**: Always use HTTPS when transmitting exported sessions to your server. Do not log serialized sessions.
* **Session validation**: Verify the session validity on your server before performing authenticated operations.
