Cochrane started his career with Brighton & Hove Albion, and was loaned to Isthmian League South side East Grinstead in the January transfer market of 2018.[3] He made his professional debut for Brighton on 25 September 2019, in a 3–1 defeat at home against Aston Villa in the EFL Cup.[4] Cochrane was named in the match day squad in the Premier League on 20 July 2020 in a 0–0 home draw against Newcastle United, he remained an unused substitute.[5] On 23 September 2020, Cochrane made his first appearance for the senior side in almost a year coming on as a late substitute in a 2–0 away win over Preston in the EFL Cup.[6]
On 5 October 2020, Cochrane joined Belgian First Division B side Union SG on a season-long loan deal.[7] On 5 February 2021, it was announced that Cochrane had suffered an injury which would keep him out for the rest of the season.[8]
Heart of Midlothian
On 28 June 2021, Cochrane joined Scottish Premiership side Heart of Midlothian on a season-long loan from Brighton.[9] He made his competitive debut two weeks later, playing 83 minutes of the 2–0 away win over Peterhead in the Scottish League Cup.[10] On 31 July, he made his Scottish Premiership debut on the opening day of the 2021–22 season where he played the whole match of the 2–1 home victory over Celtic.[11] Cochrane scored his first professional goal adding Hearts' third in a 3–0 home victory over Livingston on 25 September.[12] He scored his second goal for the club on 6 November, in which he also claimed an assist in the 5–2 home victory over Dundee United.[13] On 21 May 2022, Cochrane started and played 100 minutes of the 2022 Scottish Cup final which ended in a 2–0 after-extra-time defeat against Rangers at Hampden Park.[14]
Cochrane signed a permanent deal with Hearts on 25 June 2022.[15][16]
Birmingham City
On 16 July 2024, recently relegated EFL League One club Birmingham City signed Cochrane on a four-year contract. The fee was undisclosed, but was reported as a seven-figure amount.[17] He made his debut in the starting eleven for the opening fixture of the season, a 1–1 draw at home to Reading.[18]